Python 3.4 strptime() не работает

Я пытаюсь преобразовать строку в дату и время, и она не работает...

self.loadsList[loadID][5] = datetime.strptime(
self.loadsList[loadID][5]+" "+self.loadsList[loadID][6], "%x %X %z")

и это вызывает ошибку значения.

ValueError: time data '11/08/2014 04:00:00 -0500' does not match format '%x %X %z'

Что я делаю неправильно? Спасибо! (Python 3.4)

1 ответ

По умолчанию %x Формат является эквивалентом %d/%m/%y, где %y соответствует двузначному году:

>>> import locale
>>> locale.nl_langinfo(locale.D_FMT)
'%m/%d/%y'

В качестве входных данных используется год из 4 цифр:

>>> from datetime import datetime
>>> datetime.strptime('11/08/2014', '%x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 340, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: 14

Я бы не использовал %x или же %Xпросто прописать форматы даты и времени; на основе вашего вклада и использования %x это было бы:

'%m/%d/%Y %H:%M:%S %z'

Демо-версия:

>>> datetime.strptime('11/08/2014 04:00:00 -0500', '%m/%d/%Y %H:%M:%S %z')
datetime.datetime(2014, 11, 8, 4, 0, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))

Не ясно, представляет ли ваш вклад восьмой день ноября или 11 августа; ваше использование %x предлагает первое, но я подозреваю, что вы должны вместо этого интерпретировать значение наоборот:

'%d/%m/%Y %H:%M:%S %z'

Альтернативой было бы переключить ваш язык Python со значения по умолчанию C в en_US где год будет использовать 4 цифры.

Другие вопросы по тегам