您应该如何知道哪个 pyTZ 实际上会按预期执行?

How are you supposed to know which pyTZ is actually going to do as expected?

因此shell中的以下代码很好地说明了问题。在我写这篇文章的时候,它是关于 17:32 在(因此 5:32)但是没有意义的是为什么?

 >>> d = datetime.datetime(2015,3,15,13,0,0,tzinfo=pytz.timezone('America/Detroit'))
 >>> d.isoformat()
 '2015-03-15T13:00:00-05:32'

 >>> d = datetime.datetime(2015,3,15,13,0,0,tzinfo=pytz.timezone('US/Eastern'))
 >>> d.isoformat()
 '2015-03-15T13:00:00-04:56'

终于成功了,但我不明白为什么。

 >>> d = datetime.datetime(2015,3,15,13,0,0,tzinfo=pytz.timezone('EST'))
 >>> d.isoformat()
 '2015-03-15T13:00:00-05:00'

你怎么知道哪个 TZ 实际上会按预期做?

您不能通过将值传递给 tzinfo= 来创建日期时间。在您的情况下,正确的方法是创建一个简单的日期时间并将其本地化:

>>> d = datetime.datetime(2015,3,15,13,0,0)
>>> pytz.timezone('EST').localize(d).isoformat()
'2015-03-15T13:00:00-05:00'

同样:

>>> pytz.timezone('US/Eastern').localize(d).isoformat()
'2015-03-15T13:00:00-04:00'
>>> pytz.timezone('America/Detroit').localize(d).isoformat()
'2015-03-15T13:00:00-04:00'