-1

我不明白为什么下面的代码减去一个小时的 UNIX 纪元时间戳(在时区 UTC+1 中):

import datetime
import pytz
start_dt = datetime.datetime.fromtimestamp( 1362268800 , pytz.utc )
print start_dt
# prints datetime.datetime(2013, 3, 3, 0, 0, tzinfo=<UTC>)
print int( start_dt.strftime("%s") )
# prints: 1362265200 (which is 2013-03-02T23:00Z ) <--- I expected 1362268800
print start_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
# prints: 2013-03-03T00:00:00Z

我已经通过使用解决了我的问题calendar.timegm( start_ts.timetuple() ),但我从根本上想知道上面的代码有什么问题,以及如何创建 UTC 格式的 datetime 对象以及 strftime 将在哪里打印纪元时间戳。

根据 python 文档,不允许使用“%s”。如果它导致令人困惑的结果,是否应该明确禁止(即引发异常?)?

使用 python 2.7.3

4

1 回答 1

1

根据 python 文档,不允许使用“%s”。如果它导致令人困惑的结果,是否应该明确禁止(即引发异常?)?

文档

支持的全套格式代码因平台而异,因为 Python 调用平台 C 库的 strftime() 函数,并且平台变化很常见。

Python 错误跟踪器“datetime.strftime('%s') 应该尊重 tzinfo”中存在一个未解决的问题,以添加对以下内容的明确支持"%s"

> 看来问题在于 strftime()

是的, strftime('%s') 目前忽略 tzinfo。这不是错误。对“%s”格式代码的支持是偶然的,没有在 Python 中记录。

于 2013-03-13T09:51:28.910 回答