在python中,自带的datetime和time两个时间模块在平时的使用中可以满足我们绝大多数的需求,但是由于缺乏对这些模块深度的了解和使用,导致平时能够使用到的时间功能十分有限,例如:对于time模块,我的使用几乎就是停留在程序运行时间的统计和时间戳生成这两个方面了。其实时间模块功能还是很强大的,最近正好做的东西里面有一个需求就是给定当前的一个时刻比如精确到了小时的粒度,要生成未来n个连续时刻的时间,这里简单地实现了这个功能,顺便也抽时间将之前用到的一些操作也一起总结一下记录在这里备忘。
详细的功能说明我都加在代码里面了,就不再多解释了,具体如下:
#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__:沂水寒城
功能:python datetime 常用操作总结
'''
import time
import datetime
def generateNextTimestamp(start='2018-12-07 11:35:13',num=30):
'''
以给定的当前时刻为起点,生成未来时刻的时间戳(以小时为例)
'''
res_list=[]
now_time=datetime.datetime.now()
now_time=datetime.datetime.strptime(start,'%Y-%m-%d %H:%M:%S')
for i in range(num):
now_time+=datetime.timedelta(hours=1)
next_timestamp=now_time.strftime('%Y-%m-%d %H:%M:%S')
print next_timestamp
res_list.append(next_timestamp)
print res_list
return res_list
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 getNowTime():
'''
获取当前时间
'''
now=datetime.datetime.now()
print 'now: ',now
timeStamp=now.strftime("%Y-%m-%d %H:%M:%S")
print 'timeStamp: ',timeStamp
timeStamp2=now.strftime("%Y-%m-%d %H-%M-%S")
print 'timeStamp: ',timeStamp2
timeStamp3=now.strftime("%Y/%m/%d/%H/%M/%S")
print 'timeStamp: ',timeStamp3
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
print 'day_num: ',day_num
print 'sec_num: ',sec_num
if __name__=='__main__':
generateNextTimestamp(start='2018-12-07 11:35:13',num=30)
print '-*'*40
datetime2Timestamp(datetime.datetime.now())
print '-*'*40
datetime2String(datetime.datetime.now(),format='%Y-%m-%d %H:%M:%S')
print '-*'*40
string2Datetime('2018-12-07 11:35:13',format='%Y-%m-%d %H:%M:%S')
print '-*'*40
string2Timestamp('2018-12-07 11:35:13')
print '-*'*40
timestamp2String(time.time(),format='%Y-%m-%d %H:%M:%S')
print '-*'*40
string2Array()
print '-*'*40
getNowTime()
print '-*'*40
calTimeDelta()
简单对上述各个函数测试了一下,结果如下:
2018-12-07 12:35:13
2018-12-07 13:35:13
2018-12-07 14:35:13
2018-12-07 15:35:13
2018-12-07 16:35:13
2018-12-07 17:35:13
2018-12-07 18:35:13
2018-12-07 19:35:13
2018-12-07 20:35:13
2018-12-07 21:35:13
2018-12-07 22:35:13
2018-12-07 23:35:13
2018-12-08 00:35:13
2018-12-08 01:35:13
2018-12-08 02:35:13
2018-12-08 03:35:13
2018-12-08 04:35:13
2018-12-08 05:35:13
2018-12-08 06:35:13
2018-12-08 07:35:13
2018-12-08 08:35:13
2018-12-08 09:35:13
2018-12-08 10:35:13
2018-12-08 11:35:13
2018-12-08 12:35:13
2018-12-08 13:35:13
2018-12-08 14:35:13
2018-12-08 15:35:13
2018-12-08 16:35:13
2018-12-08 17:35:13
['2018-12-07 12:35:13', '2018-12-07 13:35:13', '2018-12-07 14:35:13', '2018-12-07 15:35:13', '2018-12-07 16:35:13', '2018-12-07 17:35:13', '2018-12-07 18:35:13', '2018-12-07 19:35:13', '2018-12-07 20:35:13', '2018-12-07 21:35:13', '2018-12-07 22:35:13', '2018-12-07 23:35:13', '2018-12-08 00:35:13', '2018-12-08 01:35:13', '2018-12-08 02:35:13', '2018-12-08 03:35:13', '2018-12-08 04:35:13', '2018-12-08 05:35:13', '2018-12-08 06:35:13', '2018-12-08 07:35:13', '2018-12-08 08:35:13', '2018-12-08 09:35:13', '2018-12-08 10:35:13', '2018-12-08 11:35:13', '2018-12-08 12:35:13', '2018-12-08 13:35:13', '2018-12-08 14:35:13', '2018-12-08 15:35:13', '2018-12-08 16:35:13', '2018-12-08 17:35:13']
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
res: 1544147401.0
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
res: 2018-12-07 09:50:01
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
res: 2018-12-07 11:35:13
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
res: 2018-12-07 11:35:13
res: 1544153713.0
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
res: 2018-12-07-09
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
timeArray: time.struct_time(tm_year=2018, tm_mon=11, tm_mday=11, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=6, tm_yday=315, tm_isdst=-1)
year: 2018
month: 11
day: 11
hour: 11
minute: 11
second: 11
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
now: 2018-12-07 09:50:01.365000
timeStamp: 2018-12-07 09:50:01
timeStamp: 2018-12-07 09-50-01
timeStamp: 2018/12/07/09/50/01
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
day_num: 20
sec_num: 54000
时间模块还是很强大的,欢迎交流!