日付 時刻

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

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

Python で日付や時刻を整形する方法を解説します。

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

日付や時刻を表示のために整形することがよくありますが、その際には datetime モジュールの strftimelocale モジュールの 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 メソッドの結果は、ロケール(地域)情報によって変化します。そのため、まずは 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 メソッドの表示をロケールに合った表示(年月日の表示順等)に変えることができるようになります。

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) としておきましょう。異なるロケールではエラーが発生します。

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

strftime メソッドは、datetimedatetime クラスそれぞれで実装されていますが、使い方は同じです。

まとめ

Python で日付や時刻を整形する方法を解説しました。

日付や時刻を表示のために整形では datetime モジュールの strftimelocale モジュールの setlocale を使用します。この記事では、これらの使い方を紹介しました。

strftime をうまく使うことでシステムに合った日付・時刻の書式で出力することができるようになります。ロケール(地域)情報も適切に設定したうえで、うまく使いこなせるようになりましょう。

ソースコード

上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました