HOWTO · Python

Python が文字列を日時 datetime に変換する方法

Python で文字列を日時 datetime に変換する方法を示します

このページの内容

このチュートリアルでは、Python が文字列 string を datetime オブジェクトに変換する方法を紹介し、次に一般的な時間形式変換を実装するコード例をリストします。

datetime.strptime() 文字列を datetime に変換する

前のチュートリアルでは、datetime.strftime() メソッドを使用して文字列形式で日時 datetime を取得する方法を学習しました。ここでは、datetime.strptime() メソッドを使用して、逆変換を実装します。2つのメソッド f と p の違いは、それぞれ format と parse に対応しています。

datetime.strptime() メソッドは、指定された datetime 形式で入力文字列を解析し、解析が成功した場合、datetime オブジェクトを返します。

この strptime() 方法を使用する基本的な例を以下に示します。

from datetime import datetime

datetime.strptime("2018-01-31", "%Y-%m-%d")

結果は

datetime.datetime(2018, 1, 31, 0, 0)

参照用に、文字列形式コードのディレクティブをここにリストします

指令 意味 例
%a ロケールの省略名としての曜日。 日、月、…、土(en_US);だから、Mo、…、Sa(de_DE)
%A ロケールのフルネームとしての曜日。 日曜日、月曜日、…、土曜日(en_US);ソンタグ、モンタグ、…、サムスタッグ(de_DE)
%w 10 進数としての曜日。0 は日曜日、6 は土曜日です。 0、1、…、6
%d ゼロが埋め込まれた 10 進数としての日付。 01、02、…、31
%b ロケールの省略名としての月。 1 月、2 月、…、12 月(en_US); 1 月、2 月、…、デズ(de_DE)
%B ロケールのフルネームとしての月。 1 月、2 月、…、12 月(en_US); 1 月、2 月、…、12 月(de_DE)
%m ゼロが埋め込まれた 10 進数としての月。 01、02、…、12
%y ゼロが埋め込まれた 10 進数としての世紀のない年。 00、01、…、99
%Y 10 進数としての世紀を含む年。 0001、0002、…、2013、2014、…、9998、9999
%H ゼロが埋め込まれた 10 進数としての時間(24 時間制)。 00、01、…、23
%I ゼロが埋め込まれた 10 進数としての時間(12 時間制)。 01、02、…、12
%p AM または PM に相当するロケール。 AM、PM(en_US); am、pm(de_DE)
%M ゼロが埋め込まれた 10 進数としての分。 00、01、…、59
%S ゼロが埋め込まれた 10 進数としての秒。 00、01、…、59
%f 左側にゼロが埋め込まれた 10 進数としてのマイクロ秒。 000000、000001、…、999999
%z ±HHMM[SS](オブジェクトがナイーブである場合は、文字列を空にする) 形式の UTC オフセット。 (空)、+ 0000、-0400、+ 1030
%Z タイムゾーン名(オブジェクトが単純な場合は空の文字列)。 (空)、UTC、EST、CST
%j ゼロが埋め込まれた 10 進数としての日付。 001、002、…、366
%U ゼロが埋め込まれた 10 進数としての年の週番号(週の最初の日は日曜日)。新しい年の最初の日曜日に先行するすべての日は、0 週目と見なされます。 00、01、…、53
%W 10 進数としての年の週番号(週の最初の日は月曜日)。新しい年の最初の月曜日に先行するすべての日は、0 週目と見なされます。 00、01、…、53
%c ロケールの適切な日時表現。 火 8 月 16 日 21:30:00 1988(en_US); Di 16 Aug 21:30:00 1988(de_DE)
%x ロケールの適切な日付表現。 88/16/88(なし); 08/16/1988(en_US); 16.08.1988(de_DE)
%X ロケールの適切な時間表現。 21:30:00(en_US); 21:30:00(de_DE)
%% リテラル '%' 文字。 %

datetime.strptime() の例

7-May-2013 フォーマット

from datetime import datetime

dateString = "7-May-2018"
dateFormatter = "%u-%b-%Y"
datetime.strptime(dateString, dateFormatter)

出力:

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

31/12/2018 フォーマット

from datetime import datetime

dateString = "31/12/2013"
dateFormatter = "%d/%m/%Y"
datetime.strptime(dateString, dateFormatter)

出力:

datetime.datetime(2013, 12, 31, 0, 0)

Mon, July 16 2018 フォーマット

from datetime import datetime

dateString = "31/12/2013"
dateFormatter = "%d/%m/%Y"
datetime.strptime(dateString, dateFormatter)

出力:

datetime.datetime(2018, 7, 16, 0, 0)

Monday, July 16, 2018 20:01:56 フォーマット

from datetime import datetime

dateString = "Monday, July 16, 2018 20:01:56"
dateFormatter = "%A, %B %d, %Y %H:%M:%S"
datetime.strptime(dateString, dateFormatter)

出力:

datetime.datetime(2018, 7, 16, 20, 1, 56)