我想只使用 Python 3.9 中的标准库来构建 DST 有效的时间戳,并希望在这个版本中可以做到这一点。
在我的时区“欧洲/柏林”中,2020 年的 DST 过境点是:2020 年
3 月 29 日 02:00 时钟切换到 03:00(没有 2 小时!)
2020 年 10 月 25 日 03:00时钟切换回 02:00(小时 2 存在两次!)
我的脚本产生以下输出:
MARCH
2020-03-29 01:59:00+01:00 CET plus 1 h: 2020-03-29 02: 59:00+01:00 CET
(应该是 03:59:00 CEST,因为没有 2 小时!)
OCTOBER
2020-10-25 02:00:00+02:00 CEST 加 1 小时:2020-10-25 03:00:00+01:00 CET
(似乎可以 - 编辑:应该是 02:00 CET!!!)
下面提供了示例代码。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()}")