2011-01-24 141 views
13
import time 
print time.strftime("%a, %d %b %Y %I:%M %p %Z", time.gmtime()) 

我住在加州。出於某種原因,此代碼報告GMT時間,而不是尊重系統時區。我知道strftime知道我在太平洋,因爲它最後仍然會打印'PST',但它仍然會提前8小時。有沒有人注意到這一點?任何人都知道我的系統或我的代碼有什麼問題?Python:strftime,gmtime不尊重時區

編輯: 運行date在命令行給我正確的日期。另外,我已經在兩臺不同的計算機(mac和linux)上運行了它們,它們都提前8小時報告。您希望在使用strftime之前更正時區?

+0

如果你只是在命令行上運行「date」,該怎麼辦?難道你的電腦時間設置爲GMT,但是有加州時區? –

回答

25

time.gmtime()以UTC爲單位返回時間。你需要的是time.localtime(),其中時區感知。此行爲在time module documentation中有詳細記錄。

編輯:

爲任何time.time()風格時間戳轉換爲struct_time,你可以提供一個參數 time.localtime()

>>> print time.strftime("%a, %d %b %Y %I:%M:%S %p %Z", time.localtime(10.5)) 
Thu, 01 Jan 1970 02:00:10 AM EET 
+0

time.localtime()很好,但我從UTC文件中獲取我的時間戳。如何將UTC的時區轉換爲當地時區? –

+0

time.localtime()很好。謝謝! –

+1

@Shaun:您可能會發現[pytz](http://pytz.sourceforge.net/)可用於更多涉及時區轉換。 'time.localtime'在使用不在現在的時間戳(例如,在過去或未來超出夏時制改變等)時會遇到一些問題。 – ephemient

0

要更改您的UNIX系統上的時區,做這樣的事情:

ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime 

瀏覽在/usr/share/zoneinfo/找到你想要修改上面的命令

+0

爲何投票無評論? – Landon