日付 時刻

【Python】日付や時刻を整形する方法 ~strftime, setlocale~

【Python】日付や時刻を整形する方法 _strftime, setlocale_

Pythonで日付や時刻を整形するためのstrftimeメソッドやsetlocaleの使い方について解説します。

日付や時刻を整形する ~strftime, setlocale~

日付や時刻を整形するために使用するdatetimeモジュールのstrftimeメソッドやロケールの設定モジュールであるlocaleモジュールのsetlocaleメソッドの使い方について紹介します。

日付や時刻を整形するために使用するdatetimeモジュールのstrftimeメソッドを使用します。strftimeメソッドの出力結果は、ロケール(地域)の情報によって結果が変わります。そのため、最初にlocaleモジュールのsetlocaleメソッドを使って明示的にロケール情報を設定しておきます。

以下の簡単なサンプルを見てみましょう。

import datetime
import locale

# ロケール(地域)情報を設定する
locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')

# 日時情報を設定する
dt = datetime.datetime(2022, 1, 1, 12, 30, 30, 500)

# 日時情報を整形して表示する
print(dt)
print(dt.strftime('%c'))
print(dt.strftime('%x'))
print(dt.strftime('%X'))
print(dt.strftime('%Y年%m月%d日 %H時%M分%S秒'))
【実行結果】
2022-01-01 12:30:30.000500
2022/01/01 12:30:30
2022/01/01
12:30:30
2022年01月01日 12時30分30秒

以降では、上記のサンプルプログラムをベースにsetlocaleメソッドやstrftimeメソッドの使い方を見ていきます。

setlocaleメソッドの使い方

strftimeメソッドの結果は、ロケール(地域)情報によって変化します。そのために、まずはlocaleモジュールをインポートし、以下のようにsetlocaleメソッドでロケール情報を設定します。

import locale

# ロケール(地域)情報を設定する
locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')

setlocaleの第1引数として与えているのはカテゴリー情報で、どの範囲にロケール情報を反映するかを指定します。LC_ALLとした場合は、この記事で主に紹介するstrftimeだけではなく、ロケールに関わる全ての出力が影響を受けるため注意してください。

カテゴリー概要
LC_ALLすべて
LC_CTYPE文字タイプに関するカテゴリ。stringに関する関数の振る舞いに影響する。
LC_COLLATE文字列を並べ替えに関連するカテゴリ。localeモジュールの関数strcoll()およびstrxfrm()に影響する。
LC_TIME時刻に関連するカテゴリ。strftime等の時刻に関する関数の振る舞いに影響する。
LC_NUMERIC数字に関連するカテゴリ。 format()、atoi()、atof()およびlocaleモジュールのstr()に影響する。
LC_MONETARY金額に関連するカテゴリ。
LC_MESSAGESメッセージ表示に関連するカテゴリ。

第2引数のロケール値は、「地域情報.文字コード」という構成となっています。例えば、日本語でUTF-8という場合には、'ja_JP.UTF-8'と指定します。ロケールを変えることによって、以降で説明するstrftimeメソッドの表示をロケールに合った表示(年月日の表示順等)に変えることができるようになります。

Note

localeの公式ドキュメントの記載はこちらを参照してください。

strftimeメソッドの使い方

strftimeメソッドは、以下のように使用します。※ロケール設定の部分は除外して記載しています。

import datetime

# 日時情報を設定する
dt = datetime.datetime(2021, 1, 1, 12, 30, 30, 500)

# 日時情報を整形して表示する
print(dt)
print(dt.strftime('%c'))
print(dt.strftime('%x'))
print(dt.strftime('%X'))
print(dt.strftime('%Y年%m月%d日 %H時%M分%S秒'))

日付や時刻を整形するための指定子としては、上記の例のように%c (日時)、%x (日付)、%X (時間)などがあります。これらの表示は、前述したロケールの設定により設定したロケールに合った形で適切に表示してくれます。

もし、自分の出力したい形で文字列をカスタムしたい場合は、%Y (西暦4桁)、%m (月:01~12)、%d(日:01~31)、%H (時:00~23)、%M (分:00~59)、%S (秒:00~59)などを用いたカスタム書式で表示することができます。

注意点として、日本語のマルチバイト文字が含まれる場合にはロケール設定を日本(ja_JP)としておきましょう。異なるロケールとなっているととエラーが発生してしまいます。

書式としてどういったものがあるかの詳細は、こちらの公式ドキュメントの書式コード一覧を参考にするようにしてください。

Note

strftimeメソッドは、datetime、date、timeクラスそれぞれに実装されていますが使い方は同じです。公式ドキュメントの記載は以下を参照してください。

datetime.strftimeメソッドはこちらを参照してください。
date.strftimeメソッドはこちらを参照してください。
time.strftimeメソッドはこちらを参照してください。

整形に使用するための書式コードの一覧はこちらを参照してください。