【发布时间】:2011-10-11 16:48:16
【问题描述】:
某家银行在全球所有主要城市都设有分行。它们都在当地时间上午 10:00 开放。如果在使用 DST 的时区内,那么当地的开放时间当然也遵循 DST 调整的时间。那么我如何从本地时间转到UTC时间。
我需要的是这样的函数to_utc(localdt, tz):
参数:
- localdt:本地时间,作为天真的日期时间对象,经过 DST 调整
- tz:TZ 格式的时区,例如“欧洲/柏林”
返回:
- 日期时间对象,UTC,时区感知
编辑:
最大的挑战是检测本地时间是否在一个有夏令时的时段,这也意味着它是夏令时调整的。
对于夏季 +1 DST 的“欧洲/柏林”:
- 1 月 1 日 10:00 => 1 月 1 日 9:00 UTC
- 7 月 1 日 10:00 => 7 月 1 日 8:00 UTC
对于没有 DST 的“非洲/拉各斯”:
- 1 月 1 日 10:00 => 1 月 1 日 9:00 UTC
- 7 月 1 日 10:00 => 7 月 1 日 9:00 UTC
【问题讨论】:
-
陷阱:2011 年 3 月 27 日 01:00,时钟被调到 02:00。所以 01:00 和 02:00 之间的时间间隔是无效的。 2011 年 10 月 30 日 01:00,时钟将调回 00:00。所以 00:00 和 01:00 之间的时间间隔是不明确的。
-
pytz描述了 DST 转换不适用于任何具有时区的时区。如果专门为帮助处理时区而构建的软件包不支持这一点,那么您自己做正确的工作就太多了。你必须满足于几乎正确。
标签: python timezone utc dst pytz