日付 時刻

【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(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秒"))

日付や時刻を整形するための指定子としては、上記の例のように%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メソッドはこちらを参照してください。
書式コードの一覧はこちらを参照してください。

まとめ

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

strftimeをうまく使うことでシステムに合った書式で出力できるようになるため、使い方を覚えてもらえたらと思います。また、日付や時刻の情報はロケール(地域)がメソッドの挙動に影響します。localeモジュールのsetlocaleメソッドを使って適切に設定するように意識しましょう。