1. 程式人生 > >Python模組之time:時間獲取和轉換

Python模組之time:時間獲取和轉換

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

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

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

雖然這個模組總是可用,但並非所有的功能都適用於各個平臺。

該模組中定義的大部分函式是呼叫 C 平臺上的同名函式實現,所以各個平臺上實現可能略有不同。

一些術語和約定的解釋:

在Python中,通常有這三種方式來表示時間:時間戳、元組(struct_time)、格式化的時間字串:
(1)時間戳(timestamp) :通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們執行“type(time.time())”,返回的是float型別。
(2)格式化的時間字串(Format String): ‘1988-03-16’
(3)元組(struct_time) :struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)
# <1> 時間戳

  >>> import time
  >>> time.time()      #--------------返回當前時間的時間戳
  
  1493136727.099066
  
  # <2> 時間字串
  
  >>> time.strftime("%Y-%m-%d %X")
  '2017-04-26 00:32:18'
  
  # <3> 時間元組
  
  \>>> time.localtime()
  time.struct_time(tm_year=2017, tm_mon=4, tm_mday=26,
                   tm_hour=0, tm_min=32, tm_sec=42, tm_wday=2,
                   tm_yday=116, tm_isdst=0)

時間元祖(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_ (分) 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:142015"(2015年12月11日 週二 18時07分14秒)的 24 個字元的字串。

time.ctime([secs])

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

>>> import time
>>> time.ctime()
'Wed Jun 21 21:21:53 2017'

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才會被計算。

舉個例子:

>>> 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()是逆操作。

舉個例子:

>>> 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 時區的名稱。

字串(Format time)和結構化時間(struct time)之間的轉化

strptime 將字串時間轉化為結構化時間

strftime 將結構化時間轉化為字串時間

時間戳(Time stamp) 和結構化時間(struct time)之間的轉化

localtime/gmtime 將時間戳轉化為結構化時間

mktime 將結構化時間轉化為時間戳