您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python中的日期操作总结大全

时间:2019-08-01 15:43:05  来源:  作者:

Python里面关于日期计算的自带模块主要就是time和datetime,两个模块提供的侧重功能点不尽相同,本文主要是对我进入工作几年以来所涉及使用到的最频繁最有效的日期计算功能进行的总结和记录,分享给每一个pythoner,希望这些日期计算的小工具能够帮助您提升在工作计算中的效率。

代码实现如下:

#!usr/bin/env python
#encoding:utf-8
 
 
'''
__Author__:沂水寒城
功能: 日期计算操作记录大全
'''
 
import time
import datetime
 
def datetime2String(timestamp,format='%Y-%m-%d %H:%M:%S'):
 '''
 把datetime转成字符串
 '''
 res=timestamp.strftime(format)
 print 'res: ',res
 return res
 
 
def string2Datetime(timestamp,format='%Y-%m-%d %H:%M:%S'):
 '''
 把字符串转成datetime
 '''
 res=datetime.datetime.strptime(timestamp,format)
 print 'res: ',res
 return res
 
 
def string2Timestamp(timestamp):
 '''
 把字符串转成时间戳形式
 '''
 res=time.mktime(string2Datetime(timestamp).timetuple())
 print 'res: ',res
 return res
 
 
def timestamp2String(timestamp,format='%Y-%m-%d %H:%M:%S'):
 '''
 把时间戳转成字符串形式
 '''
 res=time.strftime("%Y-%m-%d-%H", time.localtime(timestamp))
 print 'res: ',res
 return res
 
 
def datetime2Timestamp(one_data):
 '''
 把datetime类型转为时间戳形式
 '''
 res=time.mktime(one_data.timetuple())
 print 'res: ',res
 return res
 
 
def string2Array(timestr='2018-11-11 11:11:11',format='%Y-%m-%d %H:%M:%S'):
 '''
 将字符串转化为时间数组对象
 '''
 timeArray=time.strptime(timestr,format)
 print 'timeArray: ',timeArray 
 print 'year: ',timeArray.tm_year
 print 'month: ',timeArray.tm_mon
 print 'day: ',timeArray.tm_mday
 print 'hour: ',timeArray.tm_hour
 print 'minute: ',timeArray.tm_min
 print 'second: ',timeArray.tm_sec
def calTimeDelta(timestamp1='2018-11-16 19:21:22',timestamp2='2018-12-07 10:21:22',format='%Y-%m-%d %H:%M:%S'):
 '''
 计算给定的两个时间之间的差值
 '''
 T1=datetime.datetime.strptime(timestamp1,format)
 T2=datetime.datetime.strptime(timestamp2,format)
 delta=T2-T1
 day_num=delta.days
 sec_num=delta.seconds
 total_seconds=day_num*86400+sec_num
 print 'dayNum: {0}, secNum: {1}, total_seconds: {2}.'.format(day_num,sec_num,total_seconds)
 return total_seconds
def getBeforeSecond(timestamp,seconds,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,后退 seconds 秒得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(seconds):
 now_time-=datetime.timedelta(seconds=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp 
def getBeforeMinute(timestamp,minutes,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,后退 minutes 分钟得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(minutes):
 now_time-=datetime.timedelta(minutes=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
 
def getBeforeHour(timestamp,hours,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,后退 hours 个小时得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(hours):
 now_time-=datetime.timedelta(hours=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
 
def getBeforeDay(timestamp,days,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,后退 days 天得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(days):
 now_time-=datetime.timedelta(days=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getBeforeWeek(timestamp,weeks,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,后退 weeks 个星期后得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(weeks):
 now_time-=datetime.timedelta(weeks=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getBeforeMonth(timestamp,months,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,后退 months 个月后得到对应的时间戳
 '''
 from calendar import monthrange
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 year,month,day=[int(one) for one in str(now_time).split(' ')[0].split('-')]
 for i in range(months):
 now_time-=datetime.timedelta(days=monthrange(year,month)[1])
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getBeforeYear(timestamp,years,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,后退 years 年后得到对应的时间戳
 '''
 from calendar import monthrange
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 year,month,day=[int(one) for one in str(now_time).split(' ')[0].split('-')]
 for j in range(years):
 for i in range(12):
 now_time-=datetime.timedelta(days=monthrange(year,month)[1])
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getFutureSecond(timestamp,seconds,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,前进 seconds 秒得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(seconds):
 now_time+=datetime.timedelta(seconds=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getFutureMinute(timestamp,minutes,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,前进 minutes 分钟得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(minutes):
 now_time+=datetime.timedelta(minutes=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
 
def getFutureHour(timestamp,hours,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,前进 hours 个小时得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(hours):
 now_time+=datetime.timedelta(hours=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getFutureDay(timestamp,days,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,前进 days 天得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(days):
 now_time+=datetime.timedelta(days=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getFutureWeek(timestamp,weeks,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,前进 weeks 个星期后得到对应的时间戳
 '''
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 for i in range(weeks):
 now_time+=datetime.timedelta(weeks=1)
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getFutureMonth(timestamp,months,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,前进 months 个月后得到对应的时间戳
 '''
 from calendar import monthrange
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 year,month,day=[int(one) for one in str(now_time).split(' ')[0].split('-')]
 for i in range(months):
 now_time+=datetime.timedelta(days=monthrange(year,month)[1])
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getFutureYear(timestamp,years,format='%Y-%m-%d %H:%M:%S'):
 '''
 以给定时间戳为基准,前进 years 年后得到对应的时间戳
 '''
 from calendar import monthrange
 now_time=datetime.datetime.strptime(timestamp,'%Y-%m-%d %H:%M:%S')
 year,month,day=[int(one) for one in str(now_time).split(' ')[0].split('-')]
 for j in range(years):
 for i in range(12):
 now_time+=datetime.timedelta(days=monthrange(year,month)[1])
 next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
 print 'next_timestamp: ',next_timestamp
 return next_timestamp
def getNowTimeStamp(format='%Y%m%d'):
 '''
 获取当前的时间戳
 '''
 now_time=str(datetime.datetime.now().strftime(format))
 nowTime=str(time.strftime(format,time.localtime(time.time())))
 print 'now_time:',now_time
 print 'nowTime:',nowTime
def calDayWeek(one_date):
 '''
 计算指定日期是第几周
 '''
 year1,month1,day1=[int(one) for one in one_date.split('/')]
 tmp=datetime.date(year1,month1,day1)
 info=list(tmp.isocalendar()) 
 print '{0}是第{1}周周{2}'.format(one_date,info[1],info[-1])
 
 
def calDayAfterWeeksDate(one_date,n_weeks=100):
 '''
 计算指定日期后n_weeks周后是某年某月某日
 '''
 year1,month1,day1=[int(one) for one in one_date.split('/')]
 tmp=datetime.date(year1,month1,day1)
 delta=datetime.timedelta(weeks=n_weeks)
 new_date=(tmp+delta).strftime("%Y-%m-%d %H:%M:%S").split(' ')[0]
 print '{0}过{1}周后日期为:{2}'.format(one_date,n_weeks,new_date)
 
 
def calDayAfterDaysDate(one_date,n_days=100):
 '''
 计算指定日期后n_days天后是某年某月某日
 '''
 year1,month1,day1=[int(one) for one in one_date.split('/')]
 tmp=datetime.date(year1,month1,day1)
 delta=datetime.timedelta(days=n_days)
 new_date=(tmp+delta).strftime("%Y-%m-%d %H:%M:%S").split(' ')[0]
 print '{0}过{1}天后日期为:{2}'.format(one_date,n_days,new_date)
 
if __name__=='__main__':
 #与周相关的计算
 calDayWeek('2015/09/21')
 calDayAfterWeeksDate('2015/09/21',n_weeks=100)
 calDayAfterDaysDate('2015/09/21',n_days=100)
 #计算时间间隔秒数
 calTimeDelta(timestamp1='2018-11-16 19:21:22',timestamp2='2018-12-07 10:21:22',format='%Y-%m-%d %H:%M:%S')
 
 #生成当前时刻的时间戳
 format_list=['%Y%m%d','%Y:%m:%d','%Y-%m-%d','%Y%m%d%H%M%S','%Y-%m-%d %H:%M:%S','%Y/%m/%d/%H:%M:%S']
 for format in format_list:
 getNowTimeStamp(format=format)
 #生成过去间隔指定长度时刻的时间戳
 getBeforeSecond('2018-12-19 11:00:00',40,format='%Y-%m-%d %H:%M:%S')
 getBeforeMinute('2018-12-19 11:00:00',10,format='%Y-%m-%d %H:%M:%S')
 getBeforeHour('2018-12-19 11:00:00',8,format='%Y-%m-%d %H:%M:%S')
 getBeforeDay('2018-12-19 11:00:00',5,format='%Y-%m-%d %H:%M:%S')
 getBeforeWeek('2018-12-19 11:00:00',2,format='%Y-%m-%d %H:%M:%S')
 getBeforeMonth('2018-12-19 11:00:00',3,format='%Y-%m-%d %H:%M:%S')
 getBeforeYear('2018-12-19 11:00:00',10,format='%Y-%m-%d %H:%M:%S')
 #生成未来间隔指定长度时刻的时间戳
 getFutureSecond('2018-12-19 11:00:00',40,format='%Y-%m-%d %H:%M:%S')
 getFutureMinute('2018-12-19 11:00:00',10,format='%Y-%m-%d %H:%M:%S')
 getFutureHour('2018-12-19 11:00:00',8,format='%Y-%m-%d %H:%M:%S')
 getFutureDay('2018-12-19 11:00:00',5,format='%Y-%m-%d %H:%M:%S')
 getFutureWeek('2018-12-19 11:00:00',2,format='%Y-%m-%d %H:%M:%S')
 getFutureMonth('2018-12-19 11:00:00',3,format='%Y-%m-%d %H:%M:%S')
 getFutureYear('2018-12-19 11:00:00',10,format='%Y-%m-%d %H:%M:%S')

简单对上述代码测试,输出结果如下:

2015/09/21是第39周周1
2015/09/21过100周后日期为:2017-08-21
2015/09/21过100天后日期为:2015-12-30
dayNum: 20, secNum: 54000, total_seconds: 1782000.
now_time: 20190801
nowTime: 20190801
now_time: 2019:08:01
nowTime: 2019:08:01
now_time: 2019-08-01
nowTime: 2019-08-01
now_time: 20190801151336
nowTime: 20190801151336
now_time: 2019-08-01 15:13:36
nowTime: 2019-08-01 15:13:36
now_time: 2019/08/01/15:13:36
nowTime: 2019/08/01/15:13:36
next_timestamp: 2018-12-19 10:59:20
next_timestamp: 2018-12-19 10:50:00
next_timestamp: 2018-12-19 03:00:00
next_timestamp: 2018-12-14 11:00:00
next_timestamp: 2018-12-05 11:00:00
next_timestamp: 2018-09-17 11:00:00
next_timestamp: 2008-10-12 11:00:00
next_timestamp: 2018-12-19 11:00:40
next_timestamp: 2018-12-19 11:10:00
next_timestamp: 2018-12-19 19:00:00
next_timestamp: 2018-12-24 11:00:00
next_timestamp: 2019-01-02 11:00:00
next_timestamp: 2019-03-22 11:00:00
next_timestamp: 2029-02-24 11:00:00

个人的经验累积,需要的可以拿去使用哈,欢迎交流学习!



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  Tags: Python  点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  Tags: Python  点击:(4)  评论:(0)  加入收藏
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Tags: Python  点击:(6)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  Tags: Python  点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  Tags: Python  点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  Tags: Python  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条