2016-08-19 56 views
1

我想將一個字符串轉換成日期格式,稍後存儲到SQLite數據庫中。以下是我遇到錯誤的代碼行。Python:日期轉換錯誤

date_object = datetime.strptime(date, '%b %d, %Y %H:%M %Z') 

這是錯誤:

File "00Basic.py", line 20, in spider 
    date_object = datetime.strptime(date, '%b %d, %Y %H:%M %Z') File "C:\Python27\lib\_strptime.py", line 332, in _strptime 
    (data_string, format)) ValueError: time data 'Aug 19, 2016 08:13 IST' does not match format '%b %d, %Y %H %M %Z' 

問題1:我該如何解決這個問題?

問題2:這是準備在日後在SQLite中存儲日期的正確方法嗎?

請注意:非常新的編程。

+0

錯字:您錯過了%H中的冒號:%M。它在示例代碼中,但在錯誤消息中丟失。 –

+0

我的問題是在時區,而不是冒號。 – EndermanAPM

+0

@JamesK編輯。謝謝你指出它... –

回答

0

您可以使用pytz的時區轉換,如圖引發了一個異常:

from datetime import datetime 
from pytz import timezone 

s = "Aug 19, 2016 08:13 IST".replace('IST', '') 
print(timezone('Asia/Calcutta').localize(datetime.strptime(s.rstrip(), '%b %d, %Y %H:%M'))) 
#2016-08-19 08:13:00+05:30 
#<class 'datetime.datetime'> 

我建議你使用dateutil,因爲你正在處理多個字符串時區。

+1

謝謝你,這個工作完美! :) –

0

該問題位於格式的%Z(時區)部分。 由於documentation解釋

%Z Time zone name (empty string if the object is naive). (empty), UTC, EST, CST 

它看起來像只UTC,EST和CST是有效的。 (或者它只是不承認IST

爲了解決這個問題,你可以使用%z參數接受任何UTC偏移,像這樣:

struct_time = time.strptime("Aug 19, 2016 08:13 +0530", '%b %d, %Y %H:%M %z') 

更新:雖然這工作正常在Python +3.2它,當它與Python2

運行
+0

謝謝,但這沒有奏效。我再次收到同樣的錯誤。 'ValueError:time data'2016年8月19日08:13 +530'與格式不匹配'%b%d,%Y%H:%M%Z'' –

+0

小心,這是一個**小寫z * *,還有,0(in +0530)是強制性的,%z的格式是HHMM – EndermanAPM

+0

+ z給了我另一個錯誤,'ValueError:'z'格式爲'%b%d,%Y %H:%M%z'' –