Rae*_*ven 14 python windows utc strftime offset
每次我使用:
time.strftime("%z")
Run Code Online (Sandbox Code Playgroud)
我明白了:
Eastern Daylight Time
Run Code Online (Sandbox Code Playgroud)
但是,我希望UTC偏移量为+ HHMM或-HHMM.我甚至尝试过:
time.strftime("%Z")
Run Code Online (Sandbox Code Playgroud)
仍然产生:
Eastern Daylight Time
Run Code Online (Sandbox Code Playgroud)
我已经阅读了几个与strftime()相关的其他帖子,%z似乎总是以正确的+ HHMM或-HHMM格式返回UTC偏移量.如何让strftime()以+ HHMM或-HHMM格式输出python 3.3?
编辑:我正在运行Windows 7
有关适当的解决方案,请参阅下面 abarnert 的回答。
您可以使用time.altzonewhich 以秒为单位返回负偏移量。例如,我目前在 CEST (UTC+2),所以我得到了这个:
>>> time.altzone
-7200
Run Code Online (Sandbox Code Playgroud)
并将其放入您想要的格式:
>>> '{}{:0>2}{:0>2}'.format('-' if time.altzone > 0 else '+', abs(time.altzone) // 3600, abs(time.altzone // 60) % 60)
'+0200'
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的 abarnert,time.altzone当 DST 处于活动状态时给出偏移量,而time.timezone在 DST 未处于活动状态时给出偏移量。要确定使用哪个,您可以按照 JF Sebastian在他对不同问题的回答中提出的建议进行操作。所以你可以像这样得到正确的偏移量:
time.altzone if time.daylight and time.localtime().tm_isdst > 0 else time.timezone
Run Code Online (Sandbox Code Playgroud)
正如他所建议的,您可以在 Python 3 中使用以下内容来使用datetime.timezone获取所需的格式:
>>> datetime.now(timezone.utc).astimezone().strftime('%z')
'+0200'
Run Code Online (Sandbox Code Playgroud)
在2.x中,如果你看一下这些文档time.strftime,他们甚至都不提 %z.它根本不能保证存在,更不用说跨平台保持一致.实际上,正如脚注1所暗示的那样,它由C strftime函数决定.另一方面,在3.x中,他们确实提到了%z,并且说明它不能按照您期望的方式工作的脚注不容易看到; 这是一个开放的bug.
然而,在2.6+(包括所有3.x的版本),则保证支持为"UTC形式+ HHMM或-HHMM(空字符串,如果该对象是幼稚)偏移".因此,这使得一个非常简单的解决方法:使用而不是.究竟如何改变事物取决于你究竟想要做什么 - 使用Python-dateutil然后是获得格式化为GMT偏移的本地时区的方法,但是如果你想要格式化一个完整的时间细节将有点不同.datetime.strftime %zdatetimetime tzdatetime.now(tz.tzlocal()).strftime('%z')
如果查看源代码,time.strftime基本上只检查格式字符串是否为有效的平台说明符并调用本机strftime函数,同时datetime.strftime对不同的说明符有一堆特殊处理,包括%z:特别是,在将内容传递给之前,它将替换%z为格式化版本.自2.7以来,代码已经改变了几次,甚至已经彻底重组了一次,但是即使在3.5之前的主干中也存在相同的差异.utcoffsetstrftime
| 归档时间: |
|
| 查看次数: |
7255 次 |
| 最近记录: |