2015-01-06 3 views
13

私はdateutil.parser.parseを使って文字列から日付をフォーマットしています。しかし今、それは月と日を混ぜる。Python dateutil.parser.parseは、月ではなく、月を最初に解析します。

私は05.01.2015を含む文字列を持っています。

dateutil.parser.parse("05.01.2015") 

した後、それを返します:

datetime.datetime(2015, 5, 1, 0, 0) 

を、私はそれがどのようにフォーマットがdd.mm.yyyyであることコードを伝えることができ(2015, 1, 5, 0, 0)

を返すことを望みましたか?

25.01.2015は、期待通りに(2015, 1, 25, 0, 0)と解析されます。

答えて

23

dayfirst=Trueを指定します。

>>> dateutil.parser.parse("05.01.2015", dayfirst=True) 
datetime.datetime(2015, 1, 5, 0, 0) 

これは、日付の形式があいまいな場合にはDD-MM-YYYY形式の代わりに、MM-DD-YYYYを優先します(例:日が12以下の場合) 。この機能については、hereと記載されています。

+0

Tnx、これは仕事でした!私はあなたが参照している文書を見てきましたが、何も見つかりませんでした。しかし、今はうまくいっています! (私はこのコードを1212年12月12日以降に作成したので、自動的にすべてうまくいった。) – Timo002

+0

問題はありませんでした。 –

1

あなたは「フォーマットがdd.mm.yyyyであることをコードにどのように伝えることができますか?」と尋ねました。

すでにdateutilをインポートしたので、次に最も直接答えは、日付文字列の書式を指定するかもしれないが、これは非常に醜いコードです:

>>> dateutil.parser.datetime.datetime.strptime(date_string, '%d.%m.%Y') 
datetime.datetime(2015, 1, 5, 0, 0) 

我々はコードに埋め込まれた明白な選択肢を見ることができます。あなたはそれを直接使うことができます。

>>> from datetime import datetime 
>>> datetime.strptime(date_string, '%d.%m.%Y') 
datetime.datetime(2015, 1, 5, 0, 0) 

メソッドとプロパティを十分に提供するいくつかの新しい代替ライブラリもあります。

、この場合に使用するのが最も簡単ではarrow次のようになります。

>>> import arrow 
>>> arrow.get(date_string, 'DD.MM.YYYY') 
<Arrow [2015-01-05T00:00:00+00:00]> 

私はpendulumは矢印のを学習するあなたを救うかもしれないPythonの古いフォーマットシステムを使用して、覚えてarrowの書式を簡単に見つけることが。

>>> import pendulum 
>>> pendulum.datetime.strptime(date_string, '%d.%m.%Y') 
<Pendulum [2015-01-05T00:00:00+00:00]> 
関連する問題