簡體   English   中英

在 Windows 上獲取本地時區名稱(Python 3.9 zoneinfo)

[英]Get local time zone name on Windows (Python 3.9 zoneinfo)

查看 Python 3.9 中的zoneinfo模塊,我想知道它是否還提供了一個方便的選項來檢索 Windows 上的本地時區(操作系統設置)。

在 Linux 上,你可以做

from datetime import datetime
from zoneinfo import ZoneInfo

naive = datetime(2020, 6, 11, 12)
aware = naive.replace(tzinfo=ZoneInfo('localtime'))

但是在 Windows 上,會拋出

ZoneInfoNotFoundError: '沒有找到關鍵本地時間的時區'

那我還需要使用第三方庫嗎? 例如

import time
import dateutil

tzloc = dateutil.tz.gettz(time.tzname[time.daylight])
aware = naive.replace(tzinfo=tzloc)

由於time.tzname[time.daylight]返回一個本地化的名稱(在我的例子中是德語,例如“Mitteleuropäische Sommerzeit”),這也不起作用:

aware = naive.replace(tzinfo=ZoneInfo(tzloc))

有什么想法嗎?


ps 要在backports < 3.9 上嘗試此操作,請使用反向端口(另請參閱此答案):

pip install backports.zoneinfo
pip install tzdata # needed on Windows

您不需要使用 zoneinfo 來使用系統本地時區。 您可以在調用datetime.astimezone時簡單地傳遞None (或省略)時區。

從文檔:

如果在沒有 arguments (或使用tz=None )的情況下調用系統本地時區。 轉換后的日期時間實例的.tzinfo屬性將設置為時區實例,其區域名稱和偏移量從操作系統獲得。

因此:

from datetime import datetime

naive = datetime(2020, 6, 11, 12)
aware = naive.astimezone()

雖然astimezone(None)很方便,但有時您可能想要獲取您的時區的IANA 名稱,而不是 Windows 認為最適合您的名稱。 tzlocal的新版本 3也將為此使用zoneinfo

>>> import tzlocal
>>> print(tzlocal.get_localzone())
Europe/Berlin
>>> print(repr(tzlocal.get_localzone()))
zoneinfo.ZoneInfo(key='Europe/Berlin')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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