2012-01-25 4 views
2

모두,Python DateTime 문제

나쁜 날짜를 문자열로 반환하는 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 월 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

일을 처음에는 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)