2012-02-24 102 views
11

我正在使用PayPal API,並以以下格式取回時間戳。它嘗試解析此使用strptime DateTime對象,但我得到了以下錯誤:將utc時間字符串轉換爲datetime對象

(Pdb) datetime.strptime('2012-03-01T10:00:00Z','%Y-%M-%dT%H:%M:%SZ') 
*** error: redefinition of group name 'M' as group 5; was group 2 

而且,這種格式應該是相當標準的格式是不存在適用於這樣的功能?

編輯:

好吧似乎是一個錯字。首先%M應該是%m

回答

7

看起來像是在混合%M(分鐘)和%m(月)。

2

問題是您使用%M兩次。在幾個月內使用%m

>>> datetime.strptime('2012-03-01T10:00:00Z','%Y-%m-%dT%H:%M:%SZ') 
datetime.datetime(2012, 3, 1, 10, 0) 
+0

爲什麼要使用時間?在這裏使用datetime是否合適?既然這既是日期又是時間。 – 2012-02-24 16:10:27

+0

@arno_v:我明白了,您正在使用類方法'datetime.strptime'。對於那個很抱歉。 – 2012-02-24 16:13:14

2

您有一個錯字。 %M使用了兩次。你打算在本月使用%m。來自docs

%m Month as a decimal number [01,12]. 
%M Minute as a decimal number [00,59]. 
21

從dateutil的解析器是你的朋友。

你必須點子安裝dateutil但你保存的日期轉換代碼布袋:

pip install python-dateutil 

您可以使用它像這樣。

from dateutil import parser 
ds = '2012-03-01T10:00:00Z' # or any date sting of differing formats. 
date = parser.parse(ds) 

你會發現你可以處理幾乎任何日期字符串格式與此解析器,你會得到一個很好的標準Python追溯到

+0

啊謝謝!由於我已經在這個項目中使用了dateutil,這似乎是最優雅的方式。 – 2012-02-25 13:43:38

+0

請投票並將其更改爲您的最喜歡答案,然後請@arno_v – 2012-02-25 14:10:50

相關問題