Устранение неполадок «ValueError: данные времени ... не соответствует формату» при использовании datetime.strptime - PullRequest
1 голос
/ 17 марта 2010

Моя входная строка '16-MAR-2010 03:37:04', и я хочу сохранить ее как дату и время.

Я пытаюсь использовать:

db_inst.HB_Create_Ship_Date = datetime.strptime(fields[7]," %d-%b-%Y %H:%M:%S ") 
fields[7] = '16-MAR-2010 03:37:04' 

Я получаю сообщение об ошибке:

::ValueError: time data '16-MAR-2010 03:37:04' does not match format ' %d-%b-%Y %H:%M:%S ' 

Ответы [ 4 ]

4 голосов
/ 17 марта 2010

Edit:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

).

Еще одна мысль:
Ваш текущий языковой стандарт может не указывать "MAR" как сокращение месяца.

Что дает вывод этого кода?:

import locale
locale.getdefaultlocale()

Я протестировал ваш код на компьютере с Linux (Ubuntu 9.10, Python 2.6.4) и получил ошибку ValueError.
Я удалил пробелы, изменил язык на не английский (чешский) и получил ошибку ValueError.

Академическая справка:
Как ни странно, ваш код работает на Windows XP Python 2.5.5 с посторонними пробелами:

>>> from datetime import datetime
>>> dt = '16-MAR-2010 03:37:04'
>>> datetime.strptime(dt, " %d-%b-%Y %H:%M:%S ")
datetime.datetime(2010, 3, 16, 3, 37, 4)
2 голосов
/ 17 марта 2010

Ваша строка формата имеет начальный и конечный пробел, а входная строка - нет. Удалите пробел после начальной кавычки и перед конечной кавычкой.

2 голосов
/ 17 марта 2010

Потеряйте пробелы в передней и задней части вашего формата. Я думал, что было зафиксировано, что время strptime варьируется в зависимости от прихоти того, кто написал среду выполнения C для вашей коробки. Однако, похоже, я не прав. Что означало бы, что в Python есть ошибка.

Python 2.6.4 в Windows не любит лидирующие конечные пробелы; см. ниже.

* х пользователей, что вы найдете?

А пока используйте наименьший общий знаменатель - потеряйте пробелы. У вас также может быть проблема с локалью, как упоминал Адам.

С пробелами:

>>> datetime.datetime.strptime('16-MAR-2010 03:37:04'," %d-%b-%Y %H:%M:%S ")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\python26\lib\_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '16-MAR-2010 03:37:04' does not match format ' %d-%b-%Y %H
:%M:%S '

без пробелов:

>>> datetime.datetime.strptime('16-MAR-2010 03:37:04',"%d-%b-%Y %H:%M:%S")
datetime.datetime(2010, 3, 16, 3, 37, 4)
>>>
0 голосов
/ 17 марта 2010

Попробуйте это:

db_inst.HB_Create_Ship_Date = datetime.strptime(fields[7],"%d-%b-%Y %H:%M:%S")

Кроме того, посмотрите здесь как ссылку для форматирования DateTime в Python.

...