Python:strftime()UTC偏移在Windows中无法按预期工作

发布于 2021-01-29 14:58:51

每次使用:

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格式输出?

编辑:我正在运行Windows 7

关注者
0
被浏览
59
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    要获得适当的解决方案,请参见
    下面的abarnert答案


    您可以使用time.altzone,以秒为单位返回负偏移量。例如,我目前正在CEST(UTC
    + 2)上,所以我得到了:

    >>> time.altzone
    -7200
    

    并将其放入您想要的格式:

    >>> '{}{:0>2}{:0>2}'.format('-' if time.altzone > 0 else '+', abs(time.altzone) // 3600, abs(time.altzone // 60) % 60)
    '+0200'
    

    如评论中提到的abarnert所示,time.altzone当DST处于活动状态时给出偏移量,而time.timezone在DST不处于活动状态时给出偏移量。要弄清楚使用哪个,您可以按照JF
    Sebastian在回答其他问题时所建议的那样进行操作。因此,您可以像这样获得正确的偏移量:

    time.altzone if time.daylight and time.localtime().tm_isdst > 0 else time.timezone
    

    正如他所建议的那样,您可以在Python
    3中使用以下代码通过datetime.timezone获得所需的格式:

    >>> datetime.now(timezone.utc).astimezone().strftime('%z')
    '+0200'
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看