1. 程式人生 > >Python time 模組詳解(時間獲取和轉換)

Python time 模組詳解(時間獲取和轉換)

time 模組 -- 時間獲取和轉換

time 模組提供各種時間相關的功能

在 Python 中,與時間處理有關的模組包括:time,datetime 以及 calendar


必要說明:
 

  • 雖然這個模組總是可用,但並非所有的功能都適用於各個平臺。
  • 該模組中定義的大部分函式是呼叫 C 平臺上的同名函式實現,所以各個平臺上實現可能略有不同。



一些術語和約定的解釋:
 

  • 時間戳(timestamp)的方式:通常來說,時間戳表示的是從 1970 年 1 月 1 日 00:00:00 開始按秒計算的偏移量(time.gmtime(0))此模組中的函式無法處理 1970 紀元年以前的日期和時間或太遙遠的未來(處理極限取決於 C 函式庫,對於 32 位系統來說,是 2038 年)
  • UTC(Coordinated Universal Time,世界協調時)也叫格林威治天文時間,是世界標準時間。在中國為 UTC+8
  • DST(Daylight Saving Time)即夏令時的意思
  • 一些實時函式的計算精度可能低於它們建議的值或引數,例如在大部分 Unix 系統,時鐘一秒鐘“滴答”50~100 次



時間元祖(time.struct_time):

gmtime(),localtime() 和 strptime() 以時間元祖(struct_time)的形式返回。
 

索引值(Index) 屬性(Attribute) 值(Values)
0 tm_year(年) (例如:2015)
1 tm_mon(月) 1 ~ 12
2 tm_mday(日) 1 ~ 31
3 tm_hour(時) 0 ~ 23
4 tm_min(分) 0 ~ 59
5 tm_sec(秒) 0 ~ 61(見下方注1)
6 tm_wday(星期幾) 0 ~ 6(0 表示星期一)
7 tm_yday(一年中的第幾天) 1 ~ 366
8 tm_isdst(是否為夏令時) 0, 1, -1(-1 代表夏令時)


注1:範圍真的是 0 ~ 61(你沒有看錯哦^_^);60 代表閏秒,61 是基於歷史原因保留。




time.altzone

返回格林威治西部的夏令時地區的偏移秒數;如果該地區在格林威治東部會返回負值(如西歐,包括英國);對夏令時啟用地區才能使用。


time.asctime([t])

接受時間元組並返回一個可讀的形式為"Tue Dec 11 18:07:14 2015"(2015年12月11日 週二 18時07分14秒)的 24 個字元的字串。


time.clock()

用以浮點數計算的秒數返回當前的 CPU 時間。用來衡量不同程式的耗時,比 time.time() 更有用。

Python 3.3 以後不被推薦,由於該方法依賴作業系統,建議使用 perf_counter() 或 process_time() 代替(一個返回系統執行時間,一個返回程序執行時間,請按照實際需求選擇)


time.ctime([secs]) 

作用相當於 asctime(localtime(secs)),未給引數相當於 asctime()


time.gmtime([secs])

接收時間輟(1970 紀元年後經過的浮點秒數)並返回格林威治天文時間下的時間元組 t(注:t.tm_isdst 始終為 0)


time.daylight

如果夏令時被定義,則該值為非零。


time.localtime([secs])

接收時間輟(1970 紀元年後經過的浮點秒數)並返回當地時間下的時間元組 t(t.tm_isdst 可取 0 或 1,取決於當地當時是不是夏令時)


time.mktime(t)

接受時間元組並返回時間輟(1970紀元後經過的浮點秒數)


time.perf_counter()

返回計時器的精準時間(系統的執行時間),包含整個系統的睡眠時間。由於返回值的基準點是未定義的,所以,只有連續呼叫的結果之間的差才是有效的。


time.process_time() 

返回當前程序執行 CPU 的時間總和,不包含睡眠時間。由於返回值的基準點是未定義的,所以,只有連續呼叫的結果之間的差才是有效的。


time.sleep(secs)

推遲呼叫執行緒的執行,secs 的單位是秒。


time.strftime(format[, t]) 

把一個代表時間的元組或者 struct_time(如由 time.localtime() 和 time.gmtime() 返回)轉化為格式化的時間字串。如果 t 未指定,將傳入 time.localtime()。如果元組中任何一個元素越界,將會丟擲 ValueError 異常。

format 格式如下:
 

格式 含義 備註
%a 本地(locale)簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化月份名稱
%B 本地完整月份名稱
%c 本地相應的日期和時間表示
%d 一個月中的第幾天(01 - 31)
%H 一天中的第幾個小時(24 小時制,00 - 23)
%l 一天中的第幾個小時(12 小時制,01 - 12)
%j 一年中的第幾天(001 - 366)
%m 月份(01 - 12)
%M 分鐘數(00 - 59)
%p 本地 am 或者 pm 的相應符 注1
%S 秒(01 - 61) 注2
%U 一年中的星期數(00 - 53 星期天是一個星期的開始)第一個星期天之前的所有天數都放在第 0 周 注3
%w 一個星期中的第幾天(0 - 6,0 是星期天) 注3
%W 和 %U 基本相同,不同的是 %W 以星期一為一個星期的開始
%x 本地相應日期
%X 本地相應時間
%y 去掉世紀的年份(00 - 99)
%Y 完整的年份
%z 用 +HHMM 或 -HHMM 表示距離格林威治的時區偏移(H 代表十進位制的小時數,M 代表十進位制的分鐘數)
%Z 時區的名字(如果不存在為空字元)
%% %號本身


注1:“%p”只有與“%I”配合使用才有效果。
注2:範圍真的是 0 ~ 61(你沒有看錯哦^_^);60 代表閏秒,61 是基於歷史原因保留。
注3:當使用 strptime() 函式時,只有當在這年中的週數和天數被確定的時候 %U 和 %W 才會被計算。

舉個例子:

# I love FishC.com!
>>> import time as t
>>> t.strftime("a, %d %b %Y %H:%M:%S +0000", t.gmtime())
'a, 24 Aug 2014 14:15:03 +0000'



time.strptime(string[, format])

把一個格式化時間字串轉化為 struct_time。實際上它和 strftime() 是逆操作。

舉個例子:

# I really love FishC.com!
>>> import time as t
>>> t.strptime("30 Nov 14", "%d %b %y")
time.struct_time(tm_year=2014, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=334, tm_isdst=-1)



time.time()

返回當前時間的時間戳(1970 紀元年後經過的浮點秒數)


time.timezone

time.timezone 屬性是當地時區(未啟動夏令時)距離格林威治的偏移秒數(美洲 >0;大部分歐洲,亞洲,非洲 <= 0)


time.tzname

time.tzname 屬性是包含兩個字串的元組:第一是當地非夏令時區的名稱,第二個是當地的 DST 時區的名稱。