python日期模組datetime常用操作總結(字串與datetime物件互轉、日期差值計算、時間戳獲取、時間陣列生成等)
阿新 • • 發佈:2018-12-08
在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
時間模組還是很強大的,歡迎交流!