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>)

注意,这是07/07/2011 08:00 AM UTC,实际上是01:00 AM PDT。

有人知道为什么python会给我日期时间的PST日期吗?日期时间构造函数,但不为adjust_datetime_to_timezone?

既然我看到了<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>,看来你正在使用pytz。在这种情况下,您可以使用本地化方法来创建时区感知的日期时间,并根据夏令时进行调整。(避免使用datetime.datetimetzinfo参数,因为它不调整夏令时。)

import pytz
import datetime as dt
now=dt.datetime(year=2011, month=7, day=7)
utc=pytz.utc
pacific=pytz.timezone('US/Pacific')    
now_pacific=pacific.localize(now)    
now_utc=now_pacific.astimezone(utc)
print(repr(now_pacific))
# datetime.datetime(2011, 7, 7, 0, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)
print(repr(now_utc))
# datetime.datetime(2011, 7, 7, 7, 0, tzinfo=<UTC>)

最新更新