[英]python time.time() and “Daylight Saving Time”
當運行python(Windows或Linux)的計算機的時鍾自動更改並調用time.time()
什么?
我已經讀過,當手動將時鍾更改為某個值時, time.time()
的值會更小。
time.time()
docs state:
返回自紀元以來的秒數作為浮點數。
這里提到的特定時代是Unix時代 ,即UTC時間 1970年1月1日午夜。
由於它始終基於UTC,因此不會更改計算機的時區,也不會影響計算機的時區進入或退出夏令時。
盡管該函數確實依賴於底層實現來提供值,但這些實現始終以UTC的形式返回值 - 無論操作系統如何。
特別是在Windows上,它最終調用GetSystemTimeAsFileTime
OS函數,該函數以UTC的形式返回其值。 它不受時區選擇或時區內DST更改的影響。
引用的文檔進行time.time
,
雖然此函數通常返回非遞減值,但如果在兩次調用之間設置了系統時鍾,則它可以返回比先前調用更低的值。
調整系統時鍾值的因素取決於平台。 但是,根據評論,這不應包括基於DST的更改,因為Python支持的所有操作系統都提供系統調用來檢索UTC中的當前時間(並且DST僅影響本地時間與UTC的關系)。
如果這不是一個足夠好的保證,你可能更喜歡time.montonic
,保證永遠不會倒退 - 但是,請注意它伴隨着這個警告(並決定這是否對你的用例很重要):
返回值的參考點未定義,因此只有連續調用結果之間的差異才有效。
time.time()
返回底層庫返回的值。 Python使用time(..)
或gettimeofday(.., nullptr)
(取決於系統上可用的內容)。
https://github.com/python-git/python/blob/master/Modules/timemodule.c#L874
在這兩種情況下都返回UTC。 例如:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html
time()函數應返回自Epoch以來以秒為單位的時間值
在Matt的有效評論之后,我必須添加epoch的定義,該定義明確指出time
返回UTC時間。
時代 :從歷史上看,UNIX系統時間的起源被稱為“GMT,1970年1月1日00:00:00”。 格林威治標准時間實際上不是國際標准界承認的術語; 因此,這個術語“Epoch”用於縮寫對實際標准協調世界時的參考。
為了證明這個時代是相同的檢查:
import time
a = time.gmtime(secs=0)
# time.struct_time(tm_year=2015, tm_mon=9, tm_mday=9, tm_hour=1, tm_min=3, tm_sec=28, tm_wday=2, tm_yday=252, tm_isdst=0)
b = time.localtime(secs=0)
# time.struct_time(tm_year=2015, tm_mon=9, tm_mday=9, tm_hour=3, tm_min=1, tm_sec=28, tm_wday=2, tm_yday=252, tm_isdst=1)
如果參數secs
為0,則兩個函數都使用從time.time()
返回的值。在我的情況下, tm_isdst
對於localtime設置為true,對於gmtime設置為false(表示自紀元以來的時間)。
編輯:你在哪里讀到價值會更小?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.