strftime不返回缩写时区

时间:2012-05-10 18:48:43

标签: python timezone

有谁可以告诉我为什么时区会被退回“山区夏令时”而不是MST?

import time

print time.strftime( "%H:%M %A %Z %d %b %y")

3 个答案:

答案 0 :(得分:2)

根据你提出的另一个问题,我猜你正在使用Windows。

在Windows上,strftime("%Z")会在注册表中显示位于此密钥的DaylightNameStandardName值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation。显示的内容取决于(当然)日光时间是否有效。如果更改这些设置,则必须重新启动才能使它们生效。

在Linux上,我相信(大约80%肯定:-) strftime使用它在/etc/localtime中找到的时区。在Ubuntu上,您使用dpkg-reconfigure tzdata进行设置。在Linux上,%Z显示时区(例如,我的现在显示'EDT'%z显示与UTC的偏移量(例如,我现在显示'-0400'

答案 1 :(得分:0)

您的代码似乎是正确的

import time

print time.strftime( "%H:%M %A %Z %d %b %y")

#=> 13:54 Thursday CDT 10 May 12

你在运行哪个版本的python?

答案 2 :(得分:0)

我在使用Windows时遇到了同样的问题。作为4个美国时区的快速而肮脏的解决方案,您只需从时区字符串中删除所有非大写字母的字符:

    abbreviated_tz_str = re.sub(r'[^A-Z]', '', multiplatform_tz_str )

举个例子,这里是我如何将时间戳变成一个很好的字符串:

    import re
    import time

    def nice_str( timestamp ):
        dt_str    = time.strftime( "%m/%d/%Y %I:%M:%S %p", time.localtime( timestamp ) )
        tz_str    = time.strftime( "%Z", time.localtime( timestamp ) )
        final_str = "%s (%s)" % ( dt_str, re.sub(r'[^A-Z]', '', tz_str ) )
        return( final_str )

所以:

    print( nice_str( 1425917368 ) )

显示:

    03/09/2015 09:09:28 AM (PDT)

即使在Windows上也可以。