使用 pytz 将本地时间转换为 UTC 会添加 DST?
Converting local time to UTC using pytz adds DST?
>>> t = datetime.datetime(2016, 11, 27, 14, 46, 0, 0)
tz = pytz.timezone('America/Vancouver')
utc = tz.localize(t).astimezone(pytz.utc)
now = datetime.datetime.utcnow()
>>> print t, tz, utc, now
2016-11-27 14:46:00 America/Vancouver 2016-11-27 22:46:00+00:00 2016-10-27 21:49:33.723605
为什么 utc == 2016-11-27 22:46:00+00:00
而不是 2016-11-27 21:46:00+00:00
谢谢
嗯,那是因为温哥华遵守夏令时(参见this)
从 2016 年 3 月 13 日到 11 月 6 日,温哥华是 UTC-7。 11 月 6 日之后是 UTC-8。所以 2:46 PM (14:46) today(2016 年 10 月 27 日)仍然属于时区的 DST 部分,即 14 + 7 = 21 (晚上 9:46)(UTC)。
但是,在 11 月 27 日(您要转换的日期)温哥华已经回到 "regular"(非夏令时)时间 UTC-8,因此,温哥华 14:46 下午2016 年 11 月 27 日是 14 + 8 = 22(晚上 10:46)。事实上,11 月 6 日之后的任何一天都是这样。
>>> t = datetime.datetime(2016, 11, 27, 14, 46, 0, 0)
tz = pytz.timezone('America/Vancouver')
utc = tz.localize(t).astimezone(pytz.utc)
now = datetime.datetime.utcnow()
>>> print t, tz, utc, now
2016-11-27 14:46:00 America/Vancouver 2016-11-27 22:46:00+00:00 2016-10-27 21:49:33.723605
为什么 utc == 2016-11-27 22:46:00+00:00 而不是 2016-11-27 21:46:00+00:00
谢谢
嗯,那是因为温哥华遵守夏令时(参见this)
从 2016 年 3 月 13 日到 11 月 6 日,温哥华是 UTC-7。 11 月 6 日之后是 UTC-8。所以 2:46 PM (14:46) today(2016 年 10 月 27 日)仍然属于时区的 DST 部分,即 14 + 7 = 21 (晚上 9:46)(UTC)。
但是,在 11 月 27 日(您要转换的日期)温哥华已经回到 "regular"(非夏令时)时间 UTC-8,因此,温哥华 14:46 下午2016 年 11 月 27 日是 14 + 8 = 22(晚上 10:46)。事实上,11 月 6 日之后的任何一天都是这样。