【发布时间】:2015-03-10 00:16:54
【问题描述】:
谁能告诉我为什么时区返回为“山地夏令时间”而不是 MST ?
import time
print time.strftime( "%H:%M %A %Z %d %b %y")
【问题讨论】:
-
您使用的是 Linux 还是 Windows?
-
您的问题得到解答了吗?如果是这样,您应该接受其中一个答案。
谁能告诉我为什么时区返回为“山地夏令时间”而不是 MST ?
import time
print time.strftime( "%H:%M %A %Z %d %b %y")
【问题讨论】:
根据您提出的另一个问题,我猜您使用的是 Windows。
在 Windows 上,strftime("%Z") 显示位于注册表中以下键的 DaylightName 或 StandardName 值: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'),如果您想格式化时间。
您的代码似乎是正确的
import time
print time.strftime( "%H:%M %A %Z %d %b %y")
#=> 13:54 Thursday CDT 10 May 12
你运行的是哪个版本的python?
【讨论】:
我在使用 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 上也是如此。
【讨论】: