2011-08-24 39 views
2

我需要以許多不同格式解析許多不同的日期。我遇到以下問題,並想知道anyopne是否可以解釋爲什麼;在帶有BST時區的窗口上使用python datetime.datetime.strptime

在Linux系統上的以下作品:

from datetime import datetime 
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM BST','%a %d %b %Y %H:%M:%S %p %Z') 

但運行在Windows下它會引發

ValueError異常:時間數據不匹配格式

但是,如果我嘗試GMT不BST上窗戶,它工作正常;

from datetime import datetime 
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM GMT','%a %d %b %Y %H:%M:%S %p %Z') 

是否有原因python不明白Windows下的BST時區,但它在Linux下正常工作?

謝謝,

馬特。

+0

'strptime'可以具體實現,問題不是關於python,而是關於解釋器使用的c運行時? –

+0

我想說的是,你的月份不能用大寫字母,請嘗試:** Aug **而不是AUG 你真的需要時區%Z嗎?也許你可以沒有它... – prince

+0

-daren東西來看看..謝謝 - - 拳頭首都AUG是一個錯誤,很好的發現!我將編輯OP來糾正它。 –

回答

1

在我看來,像這樣解析三個字母的時區代碼並不是一個好習慣(除非你沒有選擇)。例如,「EST」在美國通常用於UTC-4/5,並且在澳大利亞也很常用。因此,任何對「EST」的支持都必須依賴於語言環境。如果「BST」同樣含糊不清,我不會感到驚訝。

我強烈建議使用pytz模塊,其中英國民用時間的字符串標識符爲Europe/London,UTC爲Etc/UTC。無論運行應用程序的用戶或系統的區域設置如何,pytz API都將提供一致的結果。

如果您正在處理必須與區域設置綁定的UI,或者使用無法更改的格式解析輸入,請考慮使用時區對象的縮寫字典。例如:{'BST': 'Europe/London'}。然後,您的應用程序可以統一使用UTC日期和時間,這將大大降低出錯的可能性。

+1

我解析許多不同格式的日期和各種語言環境。 Pytz聽起來很有趣,我會看看。 –

+0

你是對的; BST含糊不清,也是'孟加拉國夏令時'! –

+1

由於您需要支持多種不同的區域設置,因此您可能遇到「EST」情況,其中兩個用戶期望相同的確切輸入具有不同的含義。小心,祝你好運。 – wberry