【问题标题】:python datetime.datetime not returning correct timezone info with daylight savings timepython datetime.datetime 没有返回正确的夏令时时区信息
【发布时间】:2011-09-30 18:36:28
【问题描述】:

我在 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 时间是 2011 年 7 月 7 日上午 08:00,实际上是太平洋夏令时间上午 01:00。

有人知道为什么 python 会为 datetime.datetime 构造函数提供 PST 日期,而不是为 adjust_datetime_to_timezone 提供 PST 日期吗?

【问题讨论】:

  • 这并不能直接回答你的问题,但是我昨天看到一个关于编程时处理时间技巧的好页面:unix4lyfe.org/time
  • adjust_datetime_to_timezonetimezone 来自哪里?

标签: python datetime


【解决方案1】:

因为我看到了&lt;DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD&gt;,看来您正在使用pytz。在这种情况下,您可以使用localize 方法创建针对夏令时进行调整的时区感知日期时间。 (避免使用 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>)

【讨论】:

    猜你喜欢
    • 2013-11-17
    • 2018-01-25
    • 2013-06-14
    • 2018-05-10
    • 2018-11-06
    • 2021-12-16
    • 2016-11-25
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多