日付や時刻を表す文字列からインスタンスを生成する

datetime クラスの strptime メソッドを使用すると、日付や時刻を表す文字列を解析して日付や時刻の値を取り出し、その値をもとに datetime クラスのインスタンスを生成することができます。ここでは日付や時刻を表す文字列からインスタンスを生成する方法について解説します。

(Last modified: )

文字列を解析してインスタンスを生成する

例えば "2020/07/22 10:4:38" などの日付と時刻を表す文字列から datetime クラスのインスタンスを生成することができます。 datetime クラスの strptime メソッドを使用します。

datetime.strptime(date_string, format)

1 番目の引数に日付や時刻を表す文字列、 2 番目の引数に解析に使用する書式を定義した文字列を指定します。

書式文字列には次の書式コードを組み合わせて定義します(掲載した書式コードは一部です)。例えば "2020/07/22 10:4:38" なら "%Y/%m/%d %H:%M:%S" のようになります。

%y   : 2桁の年 00, 01, ..., 99
%Y   : 4桁の月 0001, 0002, ..., 9999
%b   : 月名の短縮形 Jan, Feb, ..., Dec
%B   : 月名 January, February, ..., December
%m   : 月 01, 02, ..., 12
%d   : 日 01, 02, ..., 31
%H   : 時(24時間) 00, 01, ..., 23
%I   : 時(12時間) 00, 01, ..., 11
%p   : AM or PM
%M   : 分 00, 01, ..., 59
%S   : 秒 00, 01, ..., 59
%f   : マイクロ秒 000000, 000001, ..., 999999
%z   : タイムゾーン (空文字列), +0000, -0400 etc
%Z   : タイムゾーン名 (空文字列), UTC, EST

具体的には次のように記述します。

import datetime

dt = datetime.datetime.strptime("2020/07/22 10:4:38", "%Y/%m/%d %H:%M:%S")
print(dt)
>> 2020-07-22 10:04:38

なお解析に失敗した場合は ValueError となります。

import datetime

dt = datetime.datetime.strptime("2020/15/22 10:4:38", "%Y/%m/%d %H:%M:%S")

>> ValueError: time data '2020/15/22 10:4:38' does not match format '%Y/%m/%d %H:%M:%S'

サンプルコード

次のサンプルを見てください。

import datetime

str1 = "2020/07/22 13:37:4:33217"
str2 = "07/22/2020 PM 1:37:4:33217"
str3 = "July 22,2020 13:37:4:33217+09:00"

dt1 = datetime.datetime.strptime(str1, "%Y/%m/%d %H:%M:%S:%f")
dt2 = datetime.datetime.strptime(str2, "%m/%d/%Y %p %I:%M:%S:%f")
dt3 = datetime.datetime.strptime(str3, "%B %d,%Y %H:%M:%S:%f%z")

print(dt1)
>> 2020-07-22 13:37:04.332170
print(dt2)
>> 2020-07-22 13:37:04.332170
print(dt3)
>> 2020-07-22 13:37:04.332170+09:00

3 種類の形式で記述された日付と時刻を表す文字列を解析し、 datetime クラスのインスタンスをそれぞれ生成しました。

-- --

日付や時刻を表す文字列からインスタンスを生成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。