簡體   English   中英

Python如何判斷當前時區?

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

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