python 程式中經常要用到日期時間相關的功能。這裡簡單總結一下。
表示日期時間常用三種形式:
秒為單位的浮點數
struct_time 元組
時間字串
第一種方式是效率最高的,但是輸出的結果對使用者不友好。比如下面的例子:
import time; # 引入time模組
ticks = time.time()
print ("當前時間戳為:", ticks)
輸出的結果是:
當前時間戳為: 1558496090.8486245
這裡的 1558496090.8486245 就是表示時間的浮點數。如果我們只需要精確到秒,可以忽略小數點後面的部分。
我們可以通過 time.localtime() 將其轉化為時間元組:
tm_struct = time.localtime(ticks)
print(tm_struct)
得到的結果如下:
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=11, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=0)
這個結果說明 1558496090.8486245 表示的時間是:
2019-5-22 11:34:50 週三,是今年的第 142 天
有時我們需要得到 格林威治時間,那麼可以用 time.gmtime() 函式:
time.gmtime(ticks)
輸出如下:
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=3, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=0)
因為北京在東 8 區,所以我們的時間比格林威治時間超前 8 個小時。
使用 time.mktime() 函式可以實現時間元組轉換為秒為單位的浮點數。
下面是乙個例子:
time.mktime(tm_struct)
輸出結果如下:
1558496090.0
可以看到,小數點後面的部分被抹去了。因為時間元組只能精確到秒。
轉換方法有很多,最簡單的是 asctime():
time_str = time.asctime( tm_struct )
print(time_str)
輸出的結果如下:
wed may 22 11:34:50 2019
這樣得到的字串我們無法控制格式。如果要精確控制格式,我們可以使用 strftime():
time.strftime("%y-%m-%d %h:%m:%s", tm_struct)
time.strftime("%a %b %d %h:%m:%s %y", tm_struct)
輸出的結果如下:
'2019-05-22 11:34:50'
'wed may 22 11:34:50 2019'
strftime 支援的格式控制包括:
%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 當前時區的名稱
%% %號本身
函式 time.strptime() 可以完成這個轉換,下面是個例子:
tm2_struct = time.strptime('2019-05-22 11:34:50', "%y-%m-%d %h:%m:%s")
print(tm2_struct)
輸出的結果如下:
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=11, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=-1)
time.ctime() 類似於 time.asctime(), 請看下面的例子:
time.ctime(ticks)
輸入結果如下:
'wed may 22 11:34:50 2019'
如果想精確控制輸出的字串,我沒查到有現成的函式。估計只能先轉成元組,然後在格式化成字串。
我自己寫了個轉換函式:
def time2str(ticks, fmt='%a %b %d %h:%m:%s %y'):
tm = time.localtime(ticks)
return time.strftime(fmt, tm)
測試**:
time2str(ticks, "%y-%m-%d %h:%m:%s")
輸出結果如下:
'2019-05-22 12:54:36'
這個我也沒查到有函式能直接做這個轉換。但是我們可以自己寫乙個。
def str2time(str, fmt='%a %b %d %h:%m:%s %y'):
tm = time.strptime(str, fmt)
return time.mktime(tm)
下面是個簡單的測試用例:
str2time('2019-05-22 11:34:50', "%y-%m-%d %h:%m:%s")
輸出結果如下:
1558496090.0
python 日期 時間 字串相互轉換
在python中,日期型別date和日期時間型別datetime是不能比較的。1 如果要比較,可以將datetime轉換為date,date不能直接轉換為datetime import datetime datetime p datetime.datetime.now date p datetime...
python 日期 時間 字串相互轉換
在python中,日期型別date和日期時間型別datetime是不能比較的。1 如果要比較,可以將datetime轉換為date,date不能直接轉換為datetime import datetime datetime p datetime.datetime.now date p datetime...
python 日期 時間 字串相互轉換
在python中,日期型別date和日期時間型別datetime是不能比較的。1 如果要比較,可以將datetime轉換為date,date不能直接轉換為datetime import datetime datetime p datetime.datetime.now date p datetime...