1. 程式人生 > 程式設計 >如何學習Python time模組

如何學習Python time模組

time 模組主要包含各種提供日期、時間功能的類和函式。該模組既提供了把日期、時間格式化為字串的功能,也提供了從字串恢復日期、時間的功能。

在 Python 的互動式直譯器中先匯入 time 模組,然後輸入 [e for e in dir(time) if not e.startswith('_')] 命令,即可看到該模組所包含的全部屬性和函式:

>>> [e for e in dir(time) if not e.startswith('_')]
['altzone','asctime','clock','ctime','daylight','get_clock_info','gmtime','localtime','mktime','monotonic','perf_counter','process_time','sleep','strftime','strptime','struct_time','time','timezone','tzname']

在 time 模組內提供了一個 time.struct_time 類,該類代表一個時間物件,它主要包含 9 個屬性,每個屬性的資訊如下表所示:

表 1 time.struct_time 類中各屬性的含義

表 1 time.struct_time 類中各屬性的含義
欄位名 欄位含義
tm_year 如 2017、2018 等
tm_mon 如 2、3 等,範圍為 1~12
tm_mday 如 2、3 等,範圍為 1~31
tm_hour 如 2、3 等,範圍為 0~23
tm_min 如 2、3 等,範圍為 0~59
tm_sec 如 2、3 等,範圍為 0~59
tm_wday 週一為 0,範圍為 0~6
tm_yday 一年內第幾天 如 65,範圍 1~366
tm_isdst 夏時令 0、1 或 -1

比如,Python 可以用 time.struct_time(tm_year=2018,tm_mon=5,tm_mday=2,tm_hour=8,tm_min=0,tm_sec=30,tm_wday=3,tm_yday=1,tm_isdst=0) 很清晰地代表時間。

此外,Python 還可以用一個包含 9 個元素的元組來代表時間,該元組的 9 個元素和 struct_time 物件中 9 個屬性的含義是一一對應的。比如程式可以使用(2018,5,2,8,30,3,1,0)來代表時間。

在日期、時間模組內常用的功能函式如下:

time.asctime([t]):將時間元組或 struct_time 轉換為時間字串。如果不指定引數 t,則預設轉換當前時間。

time.ctime([secs]):將以秒數代表的時間轉換為時間宇符串。

time.gmtime([secs]):將以秒數代表的時間轉換為 struct_time 物件。如果不傳入引數,則使用當前時間。

time.localtime([secs]):將以秒數代表的時間轉換為代表當前時間的 struct_time 物件。如果不傳入引數,則使用當前時間。

time.mktime(t):它是 localtime 的反轉函式,用於將 struct_time 物件或元組代表的時間轉換為從 1970 年 1 月 1 日 0 點整到現在過了多少秒。

time.perf_counter():返回效能計數器的值。以秒為單位。

time.process_time():返回當前程序使用 CPU 的時間。以秒為單位。

time.sleep(secs):暫停 secs 秒,什麼都不幹。

time.strftime(format[,t]):將時間元組或 struct_time 物件格式化為指定格式的時間字串。如果不指定引數 t,則預設轉換當前時間。

time.strptime(string[,format]):將字串格式的時間解析成 struct_time 物件。

time.time():返回從 1970 年 1 月 1 日 0 點整到現在過了多少秒。

time.timezone:返回本地時區的時間偏移,以秒為單位。

time.tzname:返回本地時區的名字。

下面程式示範了 time 棋塊的功能函式:

import time
# 將當前時間轉換為時間字串
print(time.asctime())
# 將指定時間轉換時間字串,時間元組的後面3個元素沒有設定
print(time.asctime((2018,4,11,23,0))) # Mon Feb 4 11:08:23 2018
# 將以秒數為代表的時間轉換為時間字串
print(time.ctime(30)) # Thu Jan 1 08:00:30 1970
# 將以秒數為代表的時間轉換為struct_time物件。
print(time.gmtime(30))
# 將當前時間轉換為struct_time物件。
print(time.gmtime())
# 將以秒數為代表的時間轉換為代表當前時間的struct_time物件
print(time.localtime(30))
# 將元組格式的時間轉換為秒數代表的時間
print(time.mktime((2018,0))) # 1517713703.0
# 返回效能計數器的值
print(time.perf_counter())
# 返回當前程序使用CPU的時間
print(time.process_time())
#time.sleep(10)
# 將當前時間轉換為指定格式的字串
print(time.strftime('%Y-%m-%d %H:%M:%S'))
st = '2018年3月20日'
# 將指定時間字串恢復成struct_time物件。
print(time.strptime(st,'%Y年%m月%d日'))
# 返回從1970年1970年1月1日0點整到現在過了多少秒。
print(time.time())
# 返回本地時區的時間偏移,以秒為單位
print(time.timezone) # 在國內東八區輸出-28800

執行上面程式,可以看到如下輸出結果:

Fri Feb 22 11:28:39 2019
Mon Feb 4 11:08:23 2018
Thu Jan 1 08:00:30 1970
time.struct_time(tm_year=1970,tm_mon=1,tm_mday=1,tm_hour=0,tm_isdst=0)
time.struct_time(tm_year=2019,tm_mon=2,tm_mday=22,tm_hour=3,tm_min=28,tm_sec=39,tm_wday=4,tm_yday=53,tm_isdst=0)
time.struct_time(tm_year=1970,tm_isdst=0)
1517713703.0
0.0
0.140625
2019-02-22 11:28:39
time.struct_time(tm_year=2018,tm_mon=3,tm_mday=20,tm_sec=0,tm_wday=1,tm_yday=79,tm_isdst=-1)
1550806119.4960592
-28800

time 模組中的 strftime() 和 strptime() 兩個函式互為逆函式,其中 strftime() 用於將 struct_time 物件或時間元組轉換為時間字串;而 strptime() 函式用於將時間字串轉換為 struct_time 物件。這兩個函式都涉及編寫格式模板,比如上面程式中使用 %Y 代表年、%m 代表月、%d 代表日、%H 代表時、%M 代表分、%S 代表秒。這兩個函式所需要的時間格式字串支援的指令如下表所示:



含義
%a 本地化的星期幾的縮寫名,比如 Sun 代表星期天
%A 本地化的星期幾的完整名
%b 本地化的月份的縮寫名,比如 Jan 代表一月
%B 本地化的月份的完整名
%c 本地化的日期和時間的表示形式
%d 代表一個月中第幾天的數值,範固: 01~31
%H 代表 24 小時制的小時,範圍:00~23
%I 代表 12 小時制的小時,範圍:01~12
%j 一年中第幾天,範圍:001~366
%m 代表月份的數值,範圍:01~12
%M 代表分鐘的數值,範圍:00~59
%p 上午或下午的本地化方式。當使用 strptime() 函式並使用 %I 指令解析小時時,%p 隻影響小時欄位
%S 代表分鐘的數值,範圍:00~61。該範圍確實是 00~61,60 在表示閏秒的時間戳時有效,而 61 則是由於一些歷史原因造成的
%U 代表一年中表示第幾周,以星期天為每週的第一天,範圍:00~53。在這種方式下,一年中第一個星期天被認為處於第一週 。當使用 strptime() 函式解析時間字串時,只有同時指定了星期幾和年份該指令才會有效
%w 代表星期幾的數值,範圍:0~6,其中 0 代表週日
%W 代表一年小第幾周,以星期一為每週的第一天,範圍:00~53。在這種方式下,一年中第一個星期一被認為處於第一週 。當使用 strptime() 函式解析時間字串時,只有同時指定了星期幾和年份該指令才會有效
%x 本地化的日期的表示形式
%X 本地化的時間的表示形式
%y 年份的縮寫,範圍:00~99,比如 2018 年就簡寫成 18
%Y 年份的完整形式。如 2018
%z 顯示時區偏移
%Z 時區名(如果時區不行在,則顯示為空)
%% 用於代表%符號

知識點擴充套件:

time模組

這個模組提供各種與時間相關的函式。相關功能,可以參見datetime和calendat模組。

此模組並非所有平臺提供所有功能,因平臺而異

以下是對一些術語和慣例的解釋

  • 初始時間因平臺而異。對於Unix平臺,初始時間是1970,01,00:00:00(UTC)。檢視每個操作平臺的初始時間可以使用time.gmtime(0)函式。
  • 在所有POSIX平臺上,從初始時間以來的秒數都不包括閏秒
  • 該模組中的函式可能不處理初始時間以前和遙遠未來的日期和時間,未來的分界點對於32位作業系統是2038年。
  • UTC是協調世界時(以前稱為格林尼治標準時間,GMT)。縮寫UTC不是一個錯誤,而是英語和法語之間的妥協。
  • DST是夏令時,在一年中的某些時候,時區通常會調整一個小時。DST規則是神奇的(由當地法律決定),每年都在變化。
  • 各種實時函式的精度可能低於表示其值或引數的單位所建議的精度。

以上就是如何學習Python time模組的詳細內容,更多關於Python time模組詳解的資料請關注我們其它相關文章!