2012-01-25 6 views
2

Все,Python DateTime Issues

Я столкнулся с API, который возвращает плохие даты в виде строк. Например, иногда я сталкиваюсь с записью, которая возвращает «1856-00-00 00:00:00», которая не работает в моем приложении. Я могу легко преобразовать строку в объект datetime, но как я могу оценить один и тот же объект, чтобы определить, являются ли день и месяц 00? Вот что я до сих пор.

try: 
    date_taken = None 
    if x.has_key('datetaken'): 
     date_taken = x['datetaken'] 
     gooddate = dateutil.parser.parse(date_taken) 
    if gooddate < datetime.datetime(1960, 01, 01, 00, 00, 00): 
     fixdate = str(gooddate) 
except Exception as err: 
    logger.error('datetaken: %s', err) 

Я хотел бы преобразовать плохие объекты даты-времени с 1 января 1960 года

Адам

ответ

2

Просто попробуйте разбора его и поймать исключение:

from datetime import datetime 

string = '1856-00-00 00:00:00' 

try: 
    date = datetime.strptime(string, '%Y-%m-%d %H:%M:%S') 
except ValueError: 
    date = datetime(1960, 1, 1, 0, 0, 0) 

print(date) 
+1

+1 для того, чтобы быть первыми, но вы не учли, что дата меньше установленного минимума OP. (на самом деле я ошибаюсь, это был не заявленный минимум, это был дефолт в случае плохого объекта, поэтому я ошибся) –

+0

Вот и все! Благодаря! – aeupinhere

0
>>> import datetime, dateutil, dateutil.parser 
>>> mindate = datetime.datetime(1960, 01, 01, 00, 00, 00) 
>>> gooddate = None 
>>> try: 
... gooddate = dateutil.parser.parse('1856-00-00 00:00:00') 
... except ValueError: 
... pass 
... except Exception as err: 
... raise err 
... 
>>> if gooddate is None or gooddate < mindate: 
... gooddate = mindate 
... 
>>> gooddate 
datetime.datetime(1960, 1, 1, 0, 0)