dateutil.parser.parse
を使用して、文字列から日付をフォーマットしています。しかし、今では月と日が混ざっています。
05.01.2015
を含む文字列があります。後
dateutil.parser.parse("05.01.2015")
それは返します:
datetime.datetime(2015, 5, 1, 0, 0)
私はそれが(2015, 1, 5, 0, 0)
を返すことを望みました
形式がdd.mm.yyyy
であることをコードに伝えるにはどうすればよいですか?
レコードの場合、25.01.2015
は期待どおり(2015, 1, 25, 0, 0)
として解析されます。
dayfirst=True
を指定します。
>>> dateutil.parser.parse("05.01.2015", dayfirst=True)
datetime.datetime(2015, 1, 5, 0, 0)
これは、日付形式があいまいな場合(日が12以下の場合など)、MM-DD-YYYYではなくDD-MM-YYYY形式を優先します。この機能は文書化されています here 。
「フォーマットがdd.mm.yyyyであることをコードに伝えるにはどうすればよいですか?」
既にdateutil
をインポートしているので、ほとんどのdirect答えは日付文字列の形式を指定することですが、これは非常にいコードです:
>>> 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]>
arrow の書式設定は覚えやすいと思いますが、 pendulum はPythonの古い書式設定システムを使用しているため、矢印を学ぶ必要がなくなります。
>>> import pendulum
>>> pendulum.datetime.strptime(date_string, '%d.%m.%Y')
<Pendulum [2015-01-05T00:00:00+00:00]>