>>> import time
>>> t=1440935442
>>> time.strftime("%Y/%m/%d-%H:%M:%S %z",time.gmtime(t))
'2015/08/30-11:50:42 +0000'
>>> time.strftime("%Y/%m/%d-%H:%M:%S %z",time.localtime(t))
'2015/08/30-13:50:42 +0000'
偏移量保持不变+0000,但我预计'2015/08 / 30-13:50:42 +0200'
时区是正确的,因为命令正在解释大写%Z,因为它应该
>>> time.strftime("%Y/%m/%d-%H:%M:%S %Z",time.localtime(t))
'2015/08/30-13:50:42 CEST'
Unix日期就像我想要的那样
$ date -u --date @1440935442 +"%Y/%m/%d-%H:%M:%S %z"
2015/08/30-11:50:42 +0000
$ date --date @1440935442 +"%Y/%m/%d-%H:%M:%S %z"
2015/08/30-13:50:42 +0200
答案 0 :(得分:0)
此模块中定义的大多数功能都调用平台C库 具有相同名称的函数。咨询有时可能会有所帮助 平台文档,因为这些函数的语义 各个平台各不相同。
and:
某些平台可能支持其他指令,但仅限于此 这里列出的那些具有ANSI C标准化的含义 您平台上支持的全套格式代码,请参阅 strftime(3)文档。
...
现在不推荐使用%Z,但%z转义扩展为 所有ANSI C库都不支持首选小时/分钟偏移量。
time.strftime()
使用C strftime()
,因此行为取决于平台。 %z
应该适用于POSIX但%z
may return the same result as %Z
on Windows。 Python {2}中没有记录%z
,因此time
模块应返回给定平台上返回的任何C strftime()
而不做任何更改。
相同的代码在我的机器上的Python 3中工作:
>>> import time
>>> t = 1440935442
>>> time.strftime("%Z%z", time.gmtime(t))
'GMT+0000'
>>> time.strftime("%Z%z", time.localtime(t))
'CEST+0200'
您的问题似乎是Python 2特定的:
>>> import time
>>> t = 1440935442
>>> time.strftime("%Z%z", time.gmtime(t))
'CET+0000'
>>> time.strftime("%Z%z", time.localtime(t))
'CEST+0000'
注意:time.strftime('%Z%z')
在Python 2和3上都返回'CEST+0200'
。差异可能是因为Python< 3.3中缺少tm_zone
,tm_gmtoff
属性。 time.gmtime()
和time.localtime()
都没有提供有关Python 2的时区信息(除了tm_isdst
,这就是为什么time.gmtime()
会导致CET
)。 time.strftime('%Z%z')
使用C localtime()
,因此即使在Python 2上也可以提供tm_zone
,tm_gmtoff
。
如果您需要可移植行为并支持可能具有不同tzname的时区,过去的utc偏移量;您可以使用pytz
tzinfo对象(例如,通过tzlocal
模块)来访问历史时区数据库:
>>> from datetime import datetime
>>> import tzlocal # $ pip install tzlocal
>>> datetime.fromtimestamp(1440935442, tzlocal.get_localzone()).strftime('%Z%z')
'CEST+0200'