datetime.datetime.strptimeを見てください。
各形式の形式仕様を記述し、両方の値をdatetime
オブジェクトに変換して比較するだけです。(ある文字列形式を別の文字列形式に変換して文字列を比較することもできますが、以下で説明するように、それはアイデアとしては適切ではありません。)
例えば:
>>> import datetime
>>> fmt1 = '%Y-%m-%d %H:%M:%S.%f'
>>> fmt2 = '%H:%M:%S %a %b %d %Y'
>>> s1 = '2012-11-12 15:16:08.648521'
>>> s2 = '14:44:02 Mon Nov 12 2012'
>>> dt1 = datetime.datetime.strptime(s1, fmt1)
>>> dt2 = datetime.datetime.strptime(s2, fmt2)
>>> cmp(dt1, dt2)
1
>>> dt1
datetime.datetime(2012, 11, 12, 15, 16, 8, 648521)
>>> dt2
datetime.datetime(2012, 11, 12, 14, 44, 2)
時間形式の 1 つにはマイクロ秒が含まれ、もう 1 つには含まれていないことに注意してください。つまり、最初の形式が 2 番目のマーク (で終わる) に正確にある場合にのみ、実際には等しくなります.000000
。それに対処する方法は、何をしようとしているのかによって異なります。
たとえば、最も近い秒に丸めたい場合は、次のようにすることができます。
dt1 = datetime.datetime(dt1.year, dt1.month, dt1.day,
dt1.hour, dt1.minute,
dt1.second + (1 if dt1.microsecond >= 500000 else 0), 0)
または、特定のデルタ範囲内で等しいかどうかを確認する場合は、次のようにします。
abs(dt2 - dt1) < datetime.timedelta(0, 1)
遭遇する可能性のあるもう 1 つの問題は、タイムゾーンです。これらの日付の 1 つがローカルで、もう 1 つが GMT である場合、解析後にどちらか一方を変換する必要があります。
元の質問は、ある形式を別の形式に変換する方法を尋ねています。これを行ってから文字列として比較することもできますが、実際のdatetime
値として比較する方がはるかに優れています。1 つには、両方を 2 番目の形式に変換すると、文字列として適切に比較することさえできません ( 23 時間後14:44:02 Mon Nov 12 2012
よりも短いです)。15:44:02 Sun Nov 11 2012
また、マイクロ秒、タイム ゾーンなどの処理がより複雑になります。しかし、あなたが本当にそれをしたいのであればstrftime
、の反対の機能strptime
です:
>>> datetime.datetime.strftime(dt2, fmt1)
'2012-11-12 14:44:02.00000'