2013-03-13 117 views
-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格式的日期时间对象,以及strftime将打印历元时间戳的位置。

根据python文档使用“%s”不是特别允许的。是否应该明确地不允许(即引发异常?)如果它导致混淆结果?

使用Python 2.7.3

+1

[将日期,日期时间对象转换为POSIX时间戳的各种方法](http://stackoverflow.com/a/8778548/4279) – jfs 2013-03-13 09:26:59

回答

1

使用 “%s” 中的不是根据python文档特别允许。 如果 导致混淆结果,是否应明确禁止(即引发异常?)?

the docs

的全套支持的格式代码跨平台的不同而不同, 因为Python调用平台的C库的strftime()函数, 平台间的变化是常见的。

有一个在Python的bug跟踪系统"datetime.strftime('%s') should respect tzinfo"一个悬而未决的问题,以增加对"%s"明确支持:

>这样看来,问题在于的strftime()

是,的strftime(” %s')目前忽略tzinfo。这不是一个错误。 对'%s'格式代码的支持是附带的,并且在 Python中没有记录。