【问题标题】:Unexpected timezone offset when manually constructing a datetime object [duplicate]手动构造日期时间对象时出现意外的时区偏移[重复]
【发布时间】:2020-10-17 09:26:50
【问题描述】:

我在 Python 中手动构造一个 datetime 对象:

>>> import datetime
>>> import pytz
>>> dt = datetime.datetime(
...             2020, 4, 3, 12, 0, 0,
...             tzinfo=pytz.timezone('America/Chicago')
...         )
>>> str(dt)
'2020-04-03 12:00:00-05:51'
>>>

另一方面:

>>> naive = datetime.datetime(2020, 4, 3, 12, 0, 0,)
>>> pytz.timezone('America/Chicago').localize(naive)
datetime.datetime(2020, 4, 3, 12, 0, tzinfo=<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>)
>>> dt = pytz.timezone('America/Chicago').localize(naive)
>>> str(dt)
'2020-04-03 12:00:00-05:00'
>>> 

为什么时区偏移量在第一个代码 sn-p 中是“-05:51”,而在第二个代码中是“-05:00”。由于夏令时在 2020 年 4 月 3 日在美国/芝加哥有效,因此它们都应显示“-05:00”。

【问题讨论】:

  • 看看dateutil,你可以避免那里的“本地化问题”。参见例如here 举个例子 ;-)

标签: python datetime timezone


【解决方案1】:

您可以使用以下代码本地化日期时间:

dt = pytz.timezone('America/Chicago').localize(datetime.datetime(2020, 4, 3, 12, 0, 0))
str(dt)

输出是:

'2020-04-03 12:00:00-05:00'

【讨论】:

  • 感谢您展示了做我想做的事情的正确方法。 MrFuppes 还提供了一个链接,解释了为什么我原来的方法不起作用。
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 2021-06-02
  • 2018-03-15
  • 1970-01-01
  • 2019-06-30
  • 2011-05-18
  • 2019-03-09
相关资源
最近更新 更多