Python 日期時間與字串的相互轉換

2021-09-23 10:21:06 字數 3415 閱讀 8669

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...