[英]How does Python determine the current time zone?
Python 的文檔聲稱:
如果可選參數 tz 為 None 或未指定,則時間戳將轉換為平台的本地日期和時間,並且返回的日期時間 object 是原始的。
所以如果你調用它並且文檔是真的,你應該在你的系統時區中得到時間:
import datetime
datetime.datetime.now()
在 Linux 上,有兩種設置時區的方法:通過TZ
環境變量,或符號鏈接/etc/localtime
。
在 Docker 容器中, TZ
環境變量為空,localtime 符號鏈接如下所示:
# ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 May 11 2021 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
還有一個名為/etc/timezone
的文件,其中包含Etc/UTC
,但是tzset(3)
中沒有提到該文件,它描述了 Libc 如何處理時區配置。
所以這意味着“平台的本地日期和時間”應該是 UTC。 自然地, date
命令給出了 UTC 時間:
# date
Fri Mar 11 10:18:52 UTC 2022
#
但是,如果我啟動 Python 3.7.10,似乎還有另一種方法來確定時區,因為 Python 以某種方式決定“平台的本地日期和時間”在太平洋時區:
>>> import datetime
>>> datetime.datetime.now().isoformat()
'2022-03-11T02:18:52.183474'
所以很明顯文檔是不正確的。 Python 不使用系統時區。 它有一些其他方法來決定所在的時區。這是怎么回事?
這里發生了什么?
占卜datetime
時間來源給出
@classmethod
def now(cls, tz=None):
"Construct a datetime from time.time() and optional time zone info."
t = _time.time()
return cls.fromtimestamp(t, tz)
因此很明顯datetime.datetime.now
的行為取決於time.time
function,所以我猜答案是在time
源內部的某個地方,但它不是python
語言我會讓用戶更好地理解實現time
模塊的語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.