【问题标题】:creating a timezone aware datetime object returns a wrong timezone创建时区感知日期时间对象返回错误的时区
【发布时间】:2020-10-15 21:01:54
【问题描述】:

当我为'US/Eastern' 创建一个时区感知日期时间对象并将其打印出来时,它显示好像我的时区是-4:56 而不是-4:00

>>> obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=pytz.timezone('US/Eastern'))
>>> print(obj)
2020-07-01 09:30:00-04:56

而不是预期的:

2020-07-01 09:30:00-04:00

我做错了吗?

【问题讨论】:

  • “本地化陷阱”是pytz 的老问题,你可以在here 找到更多信息为什么它存在。

标签: python datetime timezone


【解决方案1】:

看看dateutil - 您可以使用您最初想要的方法安全地构造 tz-aware datetime 对象:

import datetime
import dateutil

obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=dateutil.tz.gettz('US/Eastern'))
print(obj)
# 2020-07-01 09:30:00-04:00

在 Python 3.9 中,zoneinfo 将作为该任务的标准库的一部分。

【讨论】:

    【解决方案2】:

    docs 中提到构造 datetime 对象不能以这种方式工作。

    你应该这样做:

    from datetime import datetime
    
    from pytz import timezone
    
    eastern = timezone('US/Eastern')
    obj = eastern.localize(datetime(2020, 7, 1, 9, 30))
    
    >>> obj
    datetime.datetime(2020, 7, 1, 9, 30, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
    >>> print(obj)
    2020-07-01 09:30:00-04:00
    

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 2019-04-22
      • 2017-06-26
      • 1970-01-01
      • 2020-12-03
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多