将 datetime.datetime 从 UTC 转换为 CEST 一小时以内

Convert datetime.datetime from UTC to CEST one hour to less

如果我 运行 下面的代码我将 datetime.datetime 从 utc 转换为 cest,但它不能正常工作。如果它从 21:29 变为 23:29 是正确的,因为时差是 2 小时

from_zone = tz.gettz('UTC')
to_zone = tz.gettz('CEST')

created_at
Out[302]: datetime.datetime(2020, 1, 30, 21, 29, 34)

utc.replace(tzinfo=from_zone)
Out[303]: datetime.datetime(2020, 1, 30, 21, 29, 34, tzinfo=tzwin('UTC'))

utc.astimezone(to_zone)
Out[304]: datetime.datetime(2020, 1, 30, 22, 29, 34, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600), 'Mitteleuropäische Zeit'))

为了正确定位,请提供 IANA time zone name,例如

to_zone = tz.gettz('Europe/Berlin')

提出@GiacomoCatenazzi 的评论,请注意 IANA 时区(此处:Europe/Berlin)与地理区域相关,而关联的“缩写”(此处:CET/CEST)与偏移量相关一年中某些时期的 UTC。多个地理时区 可以 共享相同的 UTC 偏移量,例如Europe/Berlin 和 Europe/Paris 甚至在 CET 和 CEST 之间变化 simultaneously in 2020

但是:反过来,它是 1) 模棱两可或 2) 甚至无效:

  1. 多个地理区域可以有 CEST UTC 偏移量 在某些时候
  2. 例如 2020-01-01 没有 CEST(尽管世界其他地方的国家当时可能有 UTC+2...)