文字列をdatetimeに変換する

私は、このような日付時間の膨大なリストを文字列として持っています。

Jun 1 2005  1:33PM
Aug 28 1999 12:00AM

これらをデータベースの適切なdatetimeフィールドに戻そうとしているので、本当のdatetimeオブジェクトにマジックで変換する必要があります。

これは Django の ORM を介して行われるので、挿入時の変換に SQL を使うことはできません。

ソリューション

datetime.strptime` は、文字列を解析して日付情報を得るためのメインルーチンです。あらゆる種類のフォーマットを扱うことができ、フォーマット文字列を与えることでフォーマットを決定します。

from datetime import datetime

datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

結果として得られる datetime オブジェクトは、タイムゾーンに依存しません。

リンク

  • strptime` の Python ドキュメントです。Python 2Python 3

  • Python の strptime/strftime フォーマット文字列に関するドキュメントです。Python 2Python 3

  • strftime.orgは、strftimeのとても良いリファレンスです。

注意してください。

  • strptime` = "文字列の解析時間"
  • strftime` = "文字列のフォーマット時間"
  • 今日、声に出して発音しておけば、6ヶ月後にはもう検索する必要はないでしょう。
解説 (14)

サードパーティ製のdateutilライブラリを使用します。

from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")  # datetime.datetime(1999, 8, 28, 0, 0)

このライブラリは、あなたが解析する必要があるものを含め、ほとんどの日付フォーマットを扱うことができます。ほとんどの場合、正しいフォーマットを推測できるので、 strptime よりも便利です。

パフォーマンスよりも読みやすさを重視するようなテストを書くときに非常に便利です。

でインストールできます。

pip install python-dateutil
解説 (8)

time]2モジュールのstrptimeを見てみましょう。 これは [strftime][3] の逆バージョンです。

$ python
>>> import time
>>> time.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
                 tm_hour=13, tm_min=33, tm_sec=0,
                 tm_wday=2, tm_yday=152, tm_isdst=-1)

[3]: http://docs.python.org/3/library/time.html#time.strftime

解説 (6)