一文搞定python的時間處理
阿新 • • 發佈:2018-12-04
time模組
# -*- coding: utf-8 -*- # author: inpurer(月小水長) # pc_type lenovo # create_date: 2018/12/3 # file_name: timetest.py # description: 月小水長,熱血未涼 import time t0 = time.time() #description: 輸出當前時間距離1970.1.1的秒數,精確到小數點後6位,也叫做時間戳 #output sample: 1543799532.602318 print(t0) t1 = time.localtime(t0) #description: 把時間戳轉成元組,包含七個元素,前六個見名知意,tm_wday是指今天是當前周的第幾天(index from 0),tm_yday類似,tm_isdst是否是夏令時,不用關心 #output sample: time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=9, tm_min=22, tm_sec=24, tm_wday=0, tm_yday=337, tm_isdst=0) print(t1) #so,可以這樣輸出今天是今年的第多少天 print(t1[-2]+1) #下面是對該元組的格式化 #description: 簡單可讀形式 #output sample: Mon Dec 3 09:31:18 2018 t2 = time.asctime(t1) print(t2) #description: 可通過引數設定成各種形式,下面是一種標準形式,各引數見名知意 #output sample: 2018-12-03 09:33:36 t3 = time.strftime("%Y-%m-%d %H:%M:%S", t1) print(t3) #%y 兩位數的年份表示(00-99) # %Y 四位數的年份表示(000-9999) # %m 月份(01-12) # %d 月內中的一天(0-31) # %H 24小時制小時數(0-23) # %I 12小時制小時數(01-12) # %M 分鐘數(00=59) # %S 秒(00-59) # # %a 本地簡化星期名稱 # %A 本地完整星期名稱 # %b 本地簡化的月份名稱 # %B 本地完整的月份名稱 # %c 本地相應的日期表示和時間表示 # %j 年內的一天(001-366) # %p 本地A.M.或P.M.的等價符 # %U 一年中的星期數(00-53)星期天為星期的開始 # %w 星期(0-6),星期天為星期的開始 # %W 一年中的星期數(00-53)星期一為星期的開始 # %x 本地相應的日期表示 # %X 本地相應的時間表示 # %Z 當前時區的名稱 # %% %號本身 # 下面是把格式化字串轉成元組 # description: 第一個引數個格式化後的字串,後一個引數和格式化對應,便於反格式化 # output sample: time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=9, tm_min=47, tm_sec=7, tm_wday=0, tm_yday=337, tm_isdst=-1) t4 = time.strptime(t3,'%Y-%m-%d %H:%M:%S') print(t4) # 把元組轉成時間戳 #description: 是time.localtime的反函式,不過由於格式化的原因,精度有所下降 #output sample: 1543801627.0 t5 = time.mktime(t4) print(t5)
datetime模組
# -*- coding: utf-8 -*- # author: inpurer(月小水長) # pc_type lenovo # create_date: 2018/12/3 # file_name: timetest.py # description: 月小水長,熱血未涼 import datetime #通過datetime.datetime.now()可以獲得當前日期時間的一個例項 #這個例項是一個datetime類物件而不是字串 #雖然直接列印該例項輸出的是一個字串,只是呼叫datetime實現的__str__方法而已 t0 = datetime.datetime.now() print(t0) #print: 2018-12-03 12:55:49.905971 print(type(t0)) #print: <class 'datetime.datetime'> #然後就可以通過物件名.的方法輸出各個時間資訊,該資訊是一個int型別 print(t0.year) #print: 2018 print(type(t0.year)) #print: <class 'int'> print(t0.month) print(t0.day) print(t0.hour) print(t0.minute) print(t0.second)
時間的儲存,比較
儲存
理論上我們可以通過拼接datetime.datetime.now()例項的各個時間變數來構建我們自己的想要時間,例如我們想要儲存year-month-day
這樣的時間資訊,我們可以這樣做:
import datetime
t0 = datetime.datetime.now()
#注意year/month/day都是int型別,不像java那樣可以直接拼接字串和數字
wanted_time = str(t0.year)+"-"+str(t0.month)+"-"+str(t0.day)
但是,這樣做會有非常尷尬的問題:格式不統一,可能會出現下面這樣的儲存形式:
2018-1-1
2018-1-11
2018-11-1
2018-11-11
…
特別是在資料量非常龐大的時候,閱讀起來非常費力,這是因為year/month/day這些都是int型,所以1
就是1
,不會顯示成01
,要實現對齊效果,必須還得字串的格式化,所以,我們通常用的是time模組(其實datetime也有字串的格式化,不過展開講就太多了,不必要浪費這麼多學習成本)
import time
t0 = time.localtime()
wanted_time = time.strftime("%Y-%m-%d",t0)
比較
就拿上面剛剛說的wanted_time
來說,可以直接通過>
、=
、<
這些符號來比較,因為wanted_time
就是一個字串。