【发布时间】:2021-02-02 23:28:09
【问题描述】:
我想仅使用 Python 3.9 中的标准库来构造 DST 有效的时间戳,并希望此版本可以实现。
在我的时区“欧洲/柏林”中,DST 2020 年的过境点是:
2020-03-29 02:00 时钟切换到 03:00(没有小时 2!)
2020 年 10 月 25 日 03:00 时钟切换回 02:00(小时 2 存在两次!)
我的脚本产生以下输出:
三月
2020-03-29 01:59:00+01:00 CET 加 1 小时:2020-03-29 02:59:00+01:00 CET
(应该是 03:59:00 CEST,因为没有第 2 小时!)
十月
2020-10-25 02:00:00+02:00 CEST 加 1 小时:2020-10-25 03:00:00+01:00 CET
(似乎可以 - 编辑:应该是欧洲中部时间 02:00 !!!)
下面提供了示例代码。 Windows 用户可能需要“pip install tzdata”才能使其工作。
任何建议将不胜感激!
'''
Should work out of the box with Python 3.9
Got a fallback import statement.
BACKPORT (3.6+)
pip install backports.zoneinfo
WINDOWS (TM) needs:
pip install tzdata
'''
from datetime import datetime, timedelta
from time import tzname
try:
from zoneinfo import ZoneInfo
except ImportError:
from backports import zoneinfo
ZoneInfo = zoneinfo.ZoneInfo
tz = ZoneInfo("Europe/Berlin")
hour = timedelta(hours=1)
print("MARCH")
dt_01 = datetime(2020, 3, 29, 1, 59, tzinfo=tz)
dt_02 = dt_01 + hour
print(f"{dt_01} {dt_01.tzname()} plus 1 h: {dt_02} {dt_02.tzname()}")
print("\nOCTOBER")
dt_01 = datetime(2020, 10, 25, 2, 0, tzinfo=tz)
dt_02 = dt_01 + hour
print(f"{dt_01} {dt_01.tzname()} plus 1 h: {dt_02} {dt_02.tzname()}")
【问题讨论】:
标签: python-3.x timezone dst timedelta zoneinfo