2017-04-26 106 views
1

從api谷歌日曆的格式就像'2017-04-26T13:00:00 + 02:00'。將unicode轉換爲datetime strptime python

我試圖轉換爲datetime沒有成功:

datetime.datetime.strptime('2017-04-26T13:00:00+02:00', '%Y-%m-%dT%H:%M:%S+%z') 

居的錯誤,我得到:

'ValueError: time data, '2017-04-26T13:00:00+02:00' does not match format '%Y-%m-%dT%H:%M:%S+%z'

我如何獲得此代碼工作?

+0

請不要標記垃圾郵件,這個問題純粹是關於日期解析,並且與unicode和google完全無關。 –

+0

謝謝。我編輯了這個問題。我只是暫時不想;也許累了。 – prometeu

+1

我們可以使用%z。有支持 – FallAndLearn

回答

2

這是因爲strptime預計爲%z格式的字符串,看起來像:+0200+02:00,即:

>>> datetime.datetime.strptime('2017-04-26T13:00:00+0200', '%Y-%m-%dT%H:%M:%S%z') 
datetime.datetime(2017, 4, 26, 13, 0, tzinfo=datetime.timezone(datetime.timedelta(0, 7200))) 

所以要根據你的情況下,任你修改字符串以滿足strptime()預期,或者你可以使用更高級別的庫來處理日期。像mayapendulum,提供非常靈活的設施來處理格式分析和相對日期管理。

>>> import pendulum, maya # you need to pip install them 
>>> pendulum.parse('2017-04-26T13:00:00+02:00') 
<Pendulum [2017-04-26T13:00:00+02:00]> 
>>> maya.parse('2017-04-26T13:00:00+02:00') 
<MayaDT epoch=1493204400.0> 
2

看看dateutil,該parse功能將幫助你。

>>> from dateutil.parser import parse 
>>> dt = parse('2017-04-26T13:00:00+02:00') 
>>> dt 
datetime.datetime(2017, 4, 26, 13, 0, tzinfo=tzoffset(None, 7200)) 
2

你可能要採取的文檔中查找PyTZArrow,壽是添加相關的日期和時間功能的外部模塊。例如,箭頭,你可以做到這一點很容易像這樣:

import arrow 

my_arrow_object = arrow.get('2017-04-26T13:00:00+02:00') 
my_datetime_object = my_arrow_object.datetime 

print(my_datetime_object) 
print(type(my_datetime_object)) 

此代碼打印所獲得的時間戳和my_datetime_object對象的類型,這是一個datetime.datetime

2017-04-26 13:00:00+02:00 
<class 'datetime.datetime'> 

箭也允許輕鬆生成「人性化」的時間字符串(如「兩個月前的一小時前」),這可以很方便。