【问题标题】:strftime does not return abbreviated time zonestrftime 不返回缩写时区
【发布时间】:2015-03-10 00:16:54
【问题描述】:

谁能告诉我为什么时区返回为“山地夏令时间”而不是 MST ?

import time

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

【问题讨论】:

  • 您使用的是 Linux 还是 Windows?
  • 您的问题得到解答了吗?如果是这样,您应该接受其中一个答案。

标签: python timezone


【解决方案1】:

根据您提出的另一个问题,我猜您使用的是 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'

【讨论】:

  • 作为便携式解决方案,pytz 模块可以使用:aware_dt.tzname()aware_dt.strftime('%Z'),如果您想格式化时间。
【解决方案2】:

您的代码似乎是正确的

import time

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

#=> 13:54 Thursday CDT 10 May 12

你运行的是哪个版本的python?

【讨论】:

  • 我在 Ubuntu Linux 和 mac-OSX 10.5 上都有相同的东西(我认为两者都是 python 2.6...)
  • 同样适用于 OS X 10.7.4 和 Python 2.5、2.6、2.7 和 3.2。
【解决方案3】:

我在使用 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 上也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2012-08-27
    • 2017-01-01
    • 2016-11-05
    相关资源
    最近更新 更多