2012-01-25 10 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月1日に悪いDateTimeオブジェクトを変換するために、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)