【问题标题】:inconsistency when switching between timezones in python在python中切换时区时的不一致
【发布时间】:2011-04-02 20:09:01
【问题描述】:

我有一个这样创建的日期时间对象:

tm = datetime.datetime.strptime('2010 Aug 04 14:15:16', '%Y %b %d %H:%M:%S')
>>> tm
datetime.datetime(2010, 8, 4, 14, 15, 16)

然后我像这样设置时区:

tm.replace(tzinfo=pytz.timezone('UTC'))
>>> tm
datetime.datetime(2010, 8, 4, 14, 15, 16, tzinfo=<UTC>)

最终,我将时区更改为美国/太平洋,如下所示:

>>> tm = tm.astimezone(pytz.timezone('US/Pacific'))
>>> tm
datetime.datetime(2010, 8, 4, 7, 15, 16, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)

这是正确的。但如果我要走向另一个方向:

>>> tm = tm.replace(tzinfo =pytz.timezone('US/Pacific'))
>>> tm
datetime.datetime(2010, 8, 4, 14, 15, 16, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)

如您所见,使用带有 PST 时区的 replace() 会错误地假定它不是夏令时。因此,当我转换为 UTC 时,它会增加 8 小时而不是 7 小时。

为什么要这样做,我该如何改变它,让它做我想做的事情(是否正确实现 DST)?

【问题讨论】:

  • 我也遇到过 Python 时区问题...

标签: python


【解决方案1】:

是的,这就是为什么您使用.astimezone 而不是.replace,而datetime 带有 时区。使用.astimezone 可以让时区有机会根据夏令时等情况进行调整。 使用.replace 给一个幼稚的datetime 一个tzinfo 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 2019-06-16
    • 2013-09-22
    • 2011-09-04
    相关资源
    最近更新 更多