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

広告

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

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

例えば "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'

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample5-1.py という名前で保存します。

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)
print(dt2)
print(dt3)

その後で、次のように実行してください。

python sample5-1.py

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

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

-- --

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

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。