python日期模块datetime常用操作总结(字符串与datetime对象互转、日期差值计算、时间戳获取、时间数组生成等)

     在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

        时间模块还是很强大的,欢迎交流!

猜你喜欢

转载自blog.csdn.net/Together_CZ/article/details/84869789