Próbuję sformatować czas daty w Pythonie 3.6 w następujący sposób,

datetime.datetime.strptime(date_string, "{Date}%Y-%m-%dT%H:%M:%S.%f%z")

Jednak formatowanie nie powiedzie się do ciągów ciągów {Date}2016-11-22T11:49:21.826-05:00 z poniższym błędem.

Traceback (most recent call last):   File "./test-date.py", line 168, in get_date
  date_time_ = datetime.datetime.strptime(date_string, "{Date}%Y-%m-%dT%H:%M:%S.%f%z").replace(tzinfo=None)   
File "/usr/lib/python3.6/_strptime.py", line 565, in _strptime_datetime
  tt, fraction = _strptime(data_string, format)   
File "/usr/lib/python3.6/_strptime.py", line 362, in _strptime
  (data_string, format))
ValueError: time data '{Date}2016-11-22T11:49:21.826-05:00' does not match format '{Date}%Y-%m-%dT%H:%M:%S.%f%z'
1
Jai 28 luty 2019, 07:15

2 odpowiedzi

Najlepsza odpowiedź

Ponieważ właściwy sposób zasilania %z jest czymś w rodzaju -0500 nie -05:00.

>>> datetime.datetime.strptime('2016-11-22T11:49:21.826-0500', "%Y-%m-%dT%H:%M:%S.%f%z")
datetime.datetime(2016, 11, 22, 11, 49, 21, 826000, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))
0
Geno Chen 28 luty 2019, 04:29

Jeśli nie masz nic przeciwko użyciu dodatkowego pakietu Python o nazwie dateutil, możesz wykonać następujące czynności:

from dateutil.parser import parse
ds = '2016-11-22T11:49:21.826-05:00'
print(parse(ds))

Wynik:

datetime.datetime(2016, 11, 22, 11, 49, 21, 826000, tzinfo=tzoffset(None, -18000))
0
Jeril 28 luty 2019, 04:27