1. 程式人生 > >python日期模組datetime常用操作總結(字串與datetime物件互轉、日期差值計算、時間戳獲取、時間陣列生成等)

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

        時間模組還是很強大的,歡迎交流!