日付や時刻の値を指定した書式を使って文字列として取得する

datetime クラスの strftime メソッドを使用すると、 datetime クラスのインスタンスが持つ日付や時刻の値を、指定した書式を使って文字列として取得することができます。ここでは日付や時刻の値を指定した書式を使って文字列として取得する方法について解説します。

(Last modified: )

日付や時刻の値を指定の書式で文字列として取得する

例えば datetime クラスのインスタンスが持つ日付や時刻の値を、書式を指定して "2020/07/22 10:4:38" のような文字列として取得することができます。 datetime クラスの strftime メソッドを使用します。

datetime.strftime(format)

引数に文字列にするときに使用する書式を指定します。

書式文字列には次の書式コードを組み合わせて定義します(掲載した書式コードは一部です)。

%y   : 2桁の年 00, 01, ..., 99
%Y   : 4桁の月 0001, 0002, ..., 9999
%b   : 月名の短縮形 Jan, Feb, ..., Dec ※1
%B   : 月名 January, February, ..., December ※1
%m   : 月 01, 02, ..., 12
%d   : 日 01, 02, ..., 31
%H   : 時(24時間) 00, 01, ..., 23
%I   : 時(12時間) 00, 01, ..., 11
%p   : AM or PM ※1
%M   : 分 00, 01, ..., 59
%S   : 秒 00, 01, ..., 59
%f   : マイクロ秒 000000, 000001, ..., 999999
%z   : タイムゾーン (空文字列), +0000, -0400 etc
%Z   : タイムゾーン名 (空文字列), UTC, EST
%a   : 曜日の短縮形 Sun, Mon, ..., Sat ※1
%A   : 曜日 Sunday, Monday, ..., Saturday ※1
%c   : 日付と時刻を適切に表示します ※1
%x   : 日付を適切に表示します ※1
%X   : 時刻を適切に表示します ※1

※1 設定されたロケールによって値は異なります

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

import datetime

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
dt = datetime.datetime.now(tokyo_tz)

print(dt.strftime("%Y/%m/%d %a %H:%M:%S"))
>> 2020/07/22 Wed 20:51:07

print(dt.strftime("%B %d,%Y %p %I:%M:%S:%f%z"))
>> July 22,2020 PM 08:51:07:737135+0900

なお strftime メソッドは date クラスおよび time クラスでも用意されています。

サンプルコード

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

import datetime

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
dt = datetime.datetime.now(tokyo_tz)

print(dt.strftime("%y/%m/%d %A %H:%M:%S"))
>> 20/11/13 Friday 22:40:59
print(dt.strftime("%B %d,%Y %p %I:%M:%S%z"))
>> November 13,2020 PM 10:40:59+0900
print(dt.strftime("%c"))
>> Fri Nov 13 22:40:59 2020

datetime クラスのインスタンスに対して 3 パターンの書式を指定し、文字列として取得しました。

ロケールを設定する

先ほど掲載した書式コードで ※1 をつけたものは設定されているロケールによって値が異なります。例えば曜日を "Monday" ではなく "月曜日" という文字列にしたい場合は、ロケールを日本に設定しておきます。

具体的にはプログラムの先頭に次のように記述します。

import locale
locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')

これでロケールの設定は完了です。それではロケールの設定も含め具体的には次のように記述します。

import datetime
import locale

locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
dt = datetime.datetime.now(tokyo_tz)

print(dt.strftime("%Y/%m/%d %a %H:%M:%S"))
>> 2020/07/22 水 21:13:26

print(dt.strftime("%B %d,%Y %p %I:%M:%S:%f%z"))
>> 7月 22,2020 午後 09:13:26:499226+0900

ロケールを設定することによって曜日や午前/午後などの表示が日本語で行われるようになりました。

サンプルコード

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

import datetime
import locale

locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
dt = datetime.datetime.now(tokyo_tz)

print(dt.strftime("%y/%m/%d %A %H:%M:%S"))
>> 20/11/13 金曜日 22:42:26
print(dt.strftime("%B %d,%Y %p %I:%M:%S%z"))
>> 11月 13,2020 午後 10:42:26+0900
print(dt.strftime("%c"))
>> 2020/11/13 22:42:26

ロケールを設定した上で datetime クラスのインスタンスに対して 3 パターンの書式を指定し、文字列として取得しました。

-- --

日付や時刻の値を指定した書式を使って文字列として取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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