[英]zoneinfo: what are the new right and posix zone-name prefixes?
[英]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.