Pythonのstrftime()をマスター:日付と時刻を見やすい文字列に変換する
Python strftime()
この記事では、例を交えてdate、time、datetimeオブジェクトを同等の文字列表現に変換する方法を学びます。
動画:Pythonにおける日付と時刻
strftime()メソッドは、date、time、またはdatetimeオブジェクトを使用して日付と時刻を表す文字列を返します。
例1:strftime()を使用したdatetimeから文字列への変換
以下のプログラムは、現在の日付と時刻を含むdatetimeオブジェクトを、さまざまな文字列形式に変換します。
from datetime import datetime
now = datetime.now() # 現在の日付と時刻
year = now.strftime("%Y")
print("年:", year)
month = now.strftime("%m")
print("月:", month)
day = now.strftime("%d")
print("日:", day)
time = now.strftime("%H:%M:%S")
print("時刻:", time)
date_time = now.strftime("%m/%d/%Y, %H:%M:%S")
print("日付と時刻:", date_time)
プログラムを実行すると、出力は以下のようになります:
年: 2018 月: 12 日: 24 時刻: 04:59:31 日付と時刻: 12/24/2018, 04:59:31
ここでは、year、day、time、date_timeは文字列ですが、nowはdatetimeオブジェクトです。
strftime()の仕組み
上記のプログラムで、%Y、%m、%dなどはフォーマットコードです。strftime()メソッドは1つ以上のフォーマットコードを引数として受け取り、それに基づいてフォーマットされた文字列を返します。
datetimeモジュールからdatetimeクラスをインポートしました。これはdatetimeクラスのオブジェクトがstrftime()メソッドにアクセスできるためです。- 現在の日付と時刻を含む
datetimeオブジェクトがnow変数に格納されます。 strftime()メソッドを使用してフォーマット済み文字列を作成できます。strftime()メソッドに渡す文字列には、複数のフォーマットコードを含めることができます。
例2:タイムスタンプから文字列を作成する
from datetime import datetime
timestamp = 1528797322
date_time = datetime.fromtimestamp(timestamp)
print("日付時刻オブジェクト:", date_time)
d = date_time.strftime("%m/%d/%Y, %H:%M:%S")
print("出力 2:", d)
d = date_time.strftime("%d %b, %Y")
print("出力 3:", d)
d = date_time.strftime("%d %B, %Y")
print("出力 4:", d)
d = date_time.strftime("%I%p")
print("出力 5:", d)
プログラムを実行すると、出力は以下のようになります:
日付時刻オブジェクト: 2018-06-12 09:55:22 出力 2: 06/12/2018, 09:55:22 出力 3: 12 Jun, 2018 出力 4: 12 June, 2018 出力 5: 09AM
フォーマットコード一覧
以下の表は、strftime()メソッドに渡せるすべてのコードを示しています。
| ディレクティブ | 意味 | 例 |
|---|---|---|
%a | 省略された曜日名 | Sun, Mon, ... |
%A | 完全な曜日名 | Sunday, Monday, ... |
%w | 曜日を10進数で表す(0=日曜日) | 0, 1, ..., 6 |
%d | 月内の日付(ゼロ埋め10進数) | 01, 02, ..., 31 |
%-d | 月内の日付(10進数、埋めなし) | 1, 2, ..., 30 |
%b | 省略された月名 | Jan, Feb, ..., Dec |
%B | 完全な月名 | January, February, ... |
%m | 月をゼロ埋め10進数で表す | 01, 02, ..., 12 |
%-m | 月を10進数で表す(埋めなし) | 1, 2, ..., 12 |
%y | 世紀なしの年(ゼロ埋め10進数) | 00, 01, ..., 99 |
%-y | 世紀なしの年(10進数、埋めなし) | 0, 1, ..., 99 |
%Y | 世紀付きの年(10進数) | 2013, 2019など |
%H | 時(24時間制、ゼロ埋め10進数) | 00, 01, ..., 23 |
%-H | 時(24時間制、10進数、埋めなし) | 0, 1, ..., 23 |
%I | 時(12時間制、ゼロ埋め10進数) | 01, 02, ..., 12 |
%-I | 時(12時間制、10進数、埋めなし) | 1, 2, ... 12 |
%p | ロケールのAMまたはPM | AM, PM |
%M | 分(ゼロ埋め10進数) | 00, 01, ..., 59 |
%-M | 分(10進数、埋めなし) | 0, 1, ..., 59 |
%S | 秒(ゼロ埋め10進数) | 00, 01, ..., 59 |
%-S | 秒(10進数、埋めなし) | 0, 1, ..., 59 |
%f | マイクロ秒(左ゼロ埋め10進数) | 000000 - 999999 |
%z | UTCオフセット(+HHMMまたは-HHMM形式) | |
%Z | タイムゾーン名 | |
%j | 年間通算日(ゼロ埋め10進数) | 001, 002, ..., 366 |
%-j | 年間通算日(10進数、埋めなし) | 1, 2, ..., 366 |
%U | 週番号(日曜日を週の初めとする) | 00, 01, ..., 53 |
%W | 週番号(月曜日を週の初めとする) | 00, 01, ..., 53 |
%c | ロケールの適切な日付と時刻表現 | Mon Sep 30 07:06:05 2013 |
%x | ロケールの適切な日付表現 | 09/30/13 |
%X | ロケールの適切な時刻表現 | 07:06:05 |
%% | リテラルの'%'文字 | % |
例3:ロケールに適した日付と時刻
from datetime import datetime
timestamp = 1528797322
date_time = datetime.fromtimestamp(timestamp)
d = date_time.strftime("%c")
print("出力 1:", d)
d = date_time.strftime("%x")
print("出力 2:", d)
d = date_time.strftime("%X")
print("出力 3:", d)
プログラムを実行すると、出力は以下のようになります:
出力 1: Tue Jun 12 09:55:22 2018 出力 2: 06/12/18 出力 3: 09:55:22
フォーマットコード%c、%x、%Xは、ロケールに適した日付と時刻の表現に使用されます。
また、Pythonのstrptime()も確認することをお勧めします。strptime()メソッドは文字列からdatetimeオブジェクトを作成します。
Python
- Python キーワードと識別子: 予約語と命名規則をマスター
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Pythonイテレータ完全ガイド:仕組みと自作方法
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Python正規表現(reモジュール)実践ガイド
- Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
- Pythonのtimeモジュールをマスター:関数、構造体、実践例
- Pythonのtime.sleep()をマスター:ベストプラクティス、マルチスレッド、実例