2015-07-13 3 views
0

Это простой вопрос об использовании символов синтаксического анализа даты в strftime. Указанные даты в следующем формате:Использование синтаксического анализа баз данных с использованием strftime в python

mydt = "25-06 01:02:03" 

Тогда моя попытка правильной строки разбора:

DateFormat = '%d-%m %H:%M:%S' 

Но, видимо, что является неправильным:

import dateutil.parser 
DateFormat = '%d-%m %H:%M:%S' 
mydt = "25-06 01:02:03" 
dateutil.parser.parse(mydt).strftime(DateFormat) 

ValueError: month must be in 1..12 

Пожалуйста, предложите соответствующий твик/исправить шаблон разбора.

ответ

4

Функция dateutil.parser.parse() не принимает форматтера. Он анализирует широкий диапазон форматов datetime без конфигурации.

Используйте метод datetime.datetime.strptime() класса вместо:

from datetime import datetime 

result = datetime.strptime(mydt, DateFormat) 

Примите во внимание, что без года на входе, в результате datetime() объекта будет иметь набор года для 1900. Вы всегда можете исправить, что с текущего года:

this_year = datetime.now().year 
result = result.replace(year=this_year) 

Если вам необходимо поддерживать 29 февраля в високосные годы, добавить год к введенному и разобрать, что:

DateFormat = '%Y %d-%m %H:%M:%S' 
year_prefix = '{:%Y} '.format(datetime.now()) 
result = datetime.strptime(year_prefix + mydt, DateFormat) 

Демо:

>>> from datetime import datetime 
>>> DateFormat = '%d-%m %H:%M:%S' 
>>> datetime.strptime(mydt, DateFormat) 
datetime.datetime(1900, 6, 25, 1, 2, 3) 
>>> this_year = datetime.now().year 
>>> datetime.strptime(mydt, DateFormat).replace(year=this_year) 
datetime.datetime(2015, 6, 25, 1, 2, 3) 
>>> DateFormat = '%Y %d-%m %H:%M:%S' 
>>> year_prefix = '{:%Y} '.format(datetime.now()) 
>>> datetime.strptime(year_prefix + mydt, DateFormat) 
datetime.datetime(2015, 6, 25, 1, 2, 3) 
+0

Спасибо! Попробуйте это сейчас. За работой. Интересно, что, по-видимому, в python было прекрасно отправлять «дополнительные» параметры методу, и python просто молча игнорирует их? – javadba

+0

Чтобы поддержать високосные годы, включите год в строку времени: 'datetime.strptime (str (datetime (2000,1,1) .year) + '-29-02', '% Y-% d-% m') ' – jfs

+0

@JFSebastian: Вы имели в виду, что объект' datetime' был динамическим? Потому что это ужасно верный способ написания '' 2000 '+ '... :-) –