>>> 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
由于
答案 0 :(得分:5)
嗯,那是因为温哥华观察夏令时(见this)
2016年3月13日至11月6日期间,温哥华为UTC-7。 11月6日之后,它是UTC-8。所以2:46 PM(14:46)今天(2016年10月27日)仍然属于时区的DST部分,那将是14 + 7 = 21(晚上9:46)
然而,11月27日(转换日期)温哥华已经回到“常规”(非DST)时间,UTC-8,因此,2016年11月27日温哥华时间14:46是14 + 8 = 22(10:46 PM)。事实上,11月6日之后的任何日期都会如此。