簡體   English   中英

python time.time()和“夏令時”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM