2012-05-10 43 views
1

誰能告訴我爲什麼時區返回爲「山區夏令時」而不是MST?strftime不返回縮短時區

import time 

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

您使用的是Linux還是Windows? – alan

+0

你的問題回答了嗎?如果是這樣,你應該接受其中的一個答案。 – alan

回答

0

您的代碼似乎是正確的

import time 

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

#=> 13:54 Thursday CDT 10 May 12 

你運行的Python的版本?

+0

我在Ubuntu Linux和Mac-OSX 10.5(我認爲這兩者都是python 2.6)上都有同樣的事情。) – mgilson

+0

對於OS X 10.7.4和Python 2.5,2.6,2.7和3.2也是如此。 –

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'

+0

作爲一種便攜式解決方案,如果您想格式化時間,可以使用'pytz'模塊:'aware_dt.tzname()'或'aware_dt.strftime('%Z')'。 – jfs

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) 

它的工作原理,甚至窗戶。