2012-11-06 6 views
9

これはおそらく非常に基本的な質問ですが、ドキュメントを読んだ後、私はまだそれを行う方法を見つけ出すことはできません..."unknown format"文字列をdatetimeオブジェクトに変換しますか?

私は未知のフォーマットの日付を含むPythonで2つの文字列を持っています。どちらのフォーマットが有効なのかわかりませんが、どちらも有効な日付 - 時刻式であることは分かりません。たとえば、それらのうちの1つはISO形式であり、もう1つは他の形式である可能性があります。

私が必要とするのは、日付を比較できることです。文字列を適切な日時オブジェクトに変換して比較できる正しい方法は何ですか?

ありがとうございました!

+2

私はタイトルを更新します。問題は "datetime文字列を比較する"ではなく、 "文字列を同等の値に変換する"ことです。 –

答えて

16

dateutil moduleには、さまざまな形式の日付文字列を解析できる日付パーサーがあります。例えば

、いくつかの日時文字列があいまいなことができることを

In [13]: import dateutil.parser as parser 

In [14]: parser.parse("19970902T090000") 
Out[14]: datetime.datetime(1997, 9, 2, 9, 0) 

In [15]: import datetime as dt 

In [16]: now = dt.datetime.now() 

In [17]: now.isoformat() 
Out[18]: '2012-11-06T15:08:51.393631' 

In [19]: parser.parse('2012-11-06T15:08:51.393631') 
Out[19]: datetime.datetime(2012, 11, 6, 15, 8, 51, 393631) 

In [20]: parser.parse('November 6, 2012') 
Out[20]: datetime.datetime(2012, 11, 6, 0, 0) 

注:10-09-2003は、例えば、10月9日または9月10日を意味する可能性があります。 dateutilは、これを処理するdayfirstyearfirstのようなパラメータがあります。

In [21]: parser.parse("10-09-2003") 
Out[21]: datetime.datetime(2003, 10, 9, 0, 0) 

In [22]: parser.parse("10-09-2003", dayfirst = True) 
Out[22]: datetime.datetime(2003, 9, 10, 0, 0) 

In [23]: parser.parse("10-09-03", yearfirst = True) 
Out[23]: datetime.datetime(2010, 9, 3, 0, 0) 
関連する問題