python datetime.datetime没有使用夏令时返回正确的时区信息

时间:2011-07-07 19:56:09

标签: python datetime

我在python中创建日期时遇到问题,因为我创建的日期在某些情况下不尊重夏令时。

例如,如果我转到我的shell并运行

>>> adjust_datetime_to_timezone(value=datetime.datetime.now(), from_tz=timezone('UTC'), to_tz=timezone('US/Pacific'))
datetime.datetime(2011, 7, 7, 12, 41, 16, 337918, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)

我得到了正确的时间。

我想创建一个作为当前日期开始的日期,所以我运行:

>>> datetime.datetime(year=2011, month=7, day=7,  tzinfo=timezone('US/Pacific'))
datetime.datetime(2011, 7, 7, 0, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)

请注意,这是一个PST日期,因为当我将其转换为UTC时:

>>> adjust_datetime_to_timezone(datetime.datetime(year=2011, month=7, day=7,  tzinfo=timezone('US/Pacific')), from_tz=timezone('US/Pacific'), to_tz=timezone('UTC')) datetime.datetime(2011, 7, 7, 8, 0, tzinfo=<UTC>)

请注意,这是UTC时间07/07/2011 08:00,实际上是太平洋时间上午01:00。

任何人都知道为什么python会给我datetime.datetime构造函数的PST日期而不是adjust_datetime_to_timezone吗?

1 个答案:

答案 0 :(得分:2)

自从我看到<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>后,您似乎正在使用pytz。在这种情况下,您可以使用localize方法创建针对夏令时调整的时区感知日期时间。 (避免使用datetime.datetime的{​​{1}}参数,因为它不会针对夏令时进行调整。)

tzinfo