每次我使用:
time.strftime("%z")
我得到:
Eastern Daylight Time
但是,我想要格式为+HHMM或-HHMM的UTC偏移量。我甚至试过:
time.strftime("%Z")
仍然会产生:
Eastern Daylight Time
我读过其他几篇与strftime()和%z相关的文章,它们似乎总是以正确的+HHMM或-HHMM格式返回UTC偏移量。如何使strftime()以python 3.3的+HHMM或-HHMM格式输出?
编辑:我正在运行Windows7
Tags:
使用
time.timezone
以秒为单位获取时间偏移量。格式使用:
将相同的格式转换为+/-HH:MM格式。
顺便问一下,这不应该是个错误吗?根据
strftime
docs。我还认为this所以答案可能有助于您从区域偏移字符串转换为HH:MM格式。但是由于
"%z"
没有按预期工作,我觉得它没有什么意义。注意:^{} 不受日光节约的影响。
在2.x中,如果您查看^{} 的文档,它们甚至都不会提到
%z
。它根本不能保证存在,更不能保证跨平台的一致性。事实上,正如footnote 1所暗示的,它由Cstrftime
函数决定。另一方面,在3.x中,他们确实提到了%z
,而且解释它不能以您期望的方式工作的脚注也不容易看到;这就是an open bug。但是,在2.6+(包括所有3.x版本)中,^{} 保证支持
%z
作为“格式为+HHMM或-HHMM(如果对象是纯字符串,则为空字符串)的UTC偏移量”。因此,这使得解决方法非常简单:使用datetime
,而不是time
。确切地说,如何改变取决于你到底想做什么-使用Python-dateutiltz
然后datetime.now(tz.tzlocal()).strftime('%z')
是获得格式为GMT偏移量的本地时区的方法,但是如果你试图格式化一个完整的时间,则细节会有点不同。如果您查看源代码,^{} 基本上只是检查格式字符串是否对平台说明符有效,并调用本机} 对不同的说明符有一系列特殊处理,包括
strftime
函数,而^{%z
;特别是,它将在传递内容之前用utcoffset
的格式化版本替换%z
到strftime
。代码自2.7版以来已经更改了几次,甚至彻底地重新组织了一次,但基本上相同的差异甚至在3.5版之前的主干中也存在。有关正确的解决方案,请参见abarnert’s answer below。
您可以使用^{} ,它以秒为单位返回负偏移量。例如,我现在正在使用CEST(UTC+2),所以我得到:
并将其放入您所需的格式:
正如注释中提到的abarnert,
time.altzone
在DST处于活动状态时给出偏移量,而time.timezone
在DST不处于活动状态时给出偏移量。要想知道使用哪个,可以按照J.F.Sebastian的建议in his answer to a different question。这样就可以得到正确的偏移:正如他所建议的,您可以在Python 3中使用以下命令来使用datetime.timezone获得所需的格式:
相关问题 更多 >
编程相关推荐