Pythonで日付をフォーマットする方法を解説!初心者でもわかるstrftime()の使い方
生徒
「Pythonで日付を『2025年9月3日』みたいに日本語の形式で表示したいんですが、できますか?」
先生
「はい、Pythonではstrftime()という関数を使えば、日付や時刻を自由な形式で表示することができますよ。」
生徒
「そんな便利な関数があるんですね!使い方を詳しく教えてください!」
先生
「それでは、Pythonで日付をフォーマットする基本から応用まで、一緒に見ていきましょう!」
1. strftime()とは?Pythonで日付を整える魔法の関数
strftime()(ストラフトタイム)は、Pythonで日付や時刻を「文字列(テキスト)」として表示したいときに使います。
例えば「2025年9月3日」や「14時30分」のように、人が読みやすい形に変えるときにとても便利です。
この関数は、datetimeモジュールのオブジェクトが持っている機能で、書き方は以下のようになります。
import datetime
now = datetime.datetime.now()
formatted = now.strftime("%Y年%m月%d日 %H時%M分%S秒")
print(formatted)
2025年09月03日 14時30分15秒
2. よく使う書式一覧(strftimeの書式コードまとめ)
strftimeでは「%(パーセント記号)」と特定のアルファベットを組み合わせて、日付や時刻の情報を表現します。以下はよく使う書式一覧です。
%Y:西暦(4桁)→例:2025%y:西暦(下2桁)→例:25%m:月(2桁)→例:09%d:日(2桁)→例:03%H:時(24時間)→例:14%I:時(12時間)→例:02%M:分 →例:30%S:秒 →例:15%p:午前・午後(AM/PM)%A:曜日名(英語)→例:Wednesday%a:曜日の省略形(英語)→例:Wed
組み合わせれば、自分の好きなフォーマットに自由自在に変更できます。
3. 日本語で日付を表示する方法
Pythonで「2025年9月3日(水)」のように日本語でフォーマットしたい場合は、曜日も含めて表現できます。ただし、曜日は英語なので、必要に応じて日本語に変換する工夫が必要です。
import datetime
now = datetime.datetime.now()
print(now.strftime("%Y年%m月%d日(%a) %H時%M分"))
2025年09月03日(水) 14時30分
上記の%aで「Wed(Wednesday)」が取得されるため、日本語で曜日を表示したい場合は変換する方法もあります。
4. 曜日を日本語に変換して表示するテクニック
英語の曜日を日本語に直したいときは、自分で辞書(対応表)を用意して変換する方法があります。
import datetime
weekday_map = {
"Mon": "月",
"Tue": "火",
"Wed": "水",
"Thu": "木",
"Fri": "金",
"Sat": "土",
"Sun": "日"
}
now = datetime.datetime.now()
weekday_en = now.strftime("%a")
weekday_ja = weekday_map[weekday_en]
formatted = now.strftime(f"%Y年%m月%d日({weekday_ja})")
print(formatted)
2025年09月03日(水)
このように、曜日を日本語にして親しみやすい表示ができます。
5. ファイル名やログの記録に使える形式
ファイル名やログに日時をつけたいときは、/や:などの記号が使えないことがあります。そんなときは、記号の代わりに-や_を使うと安全です。
import datetime
now = datetime.datetime.now()
file_name = now.strftime("log_%Y%m%d_%H%M%S.txt")
print(file_name)
log_20250903_143015.txt
これでファイル名に日付と時間が入り、整理や検索がしやすくなります。
6. 12時間表示とAM/PMの使い方
アメリカなどでは24時間制ではなく12時間制を使うことがあります。%Iと%pを使えば、午前午後を含めた表示が可能です。
import datetime
now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d %I:%M:%S %p"))
2025-09-03 02:30:15 PM
%Iは12時間制の「時」、%pは「AM」「PM」を表します。
7. strftimeの注意点とよくある間違い
注意点1:strftimeはdatetimeオブジェクトに対して使います。文字列や数値には使えません。
# 正しい例
now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d"))
# 間違った例(文字列に対して使おうとしてエラー)
text = "2025-09-03"
print(text.strftime("%Y-%m-%d")) # エラーになります
注意点2:パーセント記号%の書き間違いにも注意しましょう。正しく書かないと予期しない出力になります。
8. 応用編:複数のフォーマットを切り替える
実際のアプリやシステムでは、同じ日時を目的によって違うフォーマットで表示したいことがあります。以下はその例です。
import datetime
now = datetime.datetime.now()
display1 = now.strftime("%Y/%m/%d")
display2 = now.strftime("%m-%d (%a)")
display3 = now.strftime("%H:%M")
print(display1)
print(display2)
print(display3)
2025/09/03
09-03 (Wed)
14:30
画面や用途に応じて、フォーマットを使い分ける力がつくと、より実用的なコードが書けるようになります。
まとめ
ここまでの内容では、Pythonで日付や時刻を扱うときにとても重要になるstrftime関数の考え方と使い方を、基本から応用まで一歩ずつ確認してきました。ふだんのプログラムの中で、ただ現在の日時を表示するだけならそのままprintしてもよいのですが、実際の開発や業務の場面では「画面にきれいな形式で見せたい」「日本語の年や月や曜日を含めて読みやすくしたい」「ファイル名やログに分かりやすい形で日付を埋め込みたい」など、より細かい表現が求められます。そのようなときに活躍するのが、datetimeオブジェクトが持っているstrftimeという日付フォーマット用の機能です。Pythonで扱う日付と時刻を自分の好きな書式に変換できるようになると、画面表示もログ出力も一気に見やすくなり、プログラムの使い勝手が大きく向上します。 まず、strftimeとは何かというところから確認しました。datetimeモジュールで取得した現在の日時や特定の日付を、「文字列」として整えて表示するのがstrftimeの役割でしたね。書式指定子と呼ばれる決まった記号を組み合わせることで、西暦や月や日、時や分や秒、曜日などを思い通りの順番や形式に並べ替えることができます。たとえば「年は四桁で」「月と日は二桁で」「間に日本語の年や月や日の文字を挟んで」「最後に時刻も続けて表示する」といった要望も、ひとつのフォーマット文字列にまとめて書くことができます。Pythonの日付フォーマットを覚えるうえで、最初に意識したいのは「元の情報はdatetimeオブジェクトに入っていて、それをstrftimeで読みやすく整える」という流れでした。 次に、よく使う書式コードを整理しました。西暦を表す%Yや、その下二桁だけを表す%y、ゼロ埋めされた月を表す%m、日付を表す%d、二十四時間制の時刻を表す%Hや分を表す%M、秒を表す%Sなどは、特に出番が多い大事な記号です。これらを組み合わせるだけでも、「2025年09月03日」「2025/09/03」「2025−09−03 14:30:15」といったさまざまな表現が作れます。曜日を扱うときには英語の名称を返す%Aや、その省略形である%aが役に立ちますし、十二時間制や午前午後の表記が必要な場合は%Iや%pを使えば柔軟に対応できます。書式の一覧を一度に全部覚える必要はありませんが、よく使うものから少しずつ慣れていくと自然に身についていきます。 日本語で日付を表示する方法も大切なポイントでした。「2025年9月3日(水)」のように、年や月や日などの単位を漢字で表現し、さらにかっこ内に曜日を入れた表記は、日本語の画面表示や帳票でよく使われるスタイルです。このような書式も、strftimeに「%Y年%m月%d日(%a)」といった書式文字列を渡せば簡単に出力できます。曜日を完全に日本語の漢字にしたい場合には、英語の曜日から日本語の曜日に変換するための辞書を用意して、変換表として利用する方法も確認しました。対応表を一度作っておけば、何度でも使い回せる便利な部品になります。 さらに、ファイル名やログの記録に使える日付形式についても触れました。ファイルシステムでは、スラッシュやコロンなど一部の記号は名前に使えないことが多いため、「2025/09/03 14:30:15」のような書き方をそのままファイル名に使うのは適切ではありません。その代わりに、年月日と時刻を「20250903143015」のようにつなげたり、「2025−09−03_143015」のようにハイフンやアンダースコアを挟んだりすることで、安全かつ分かりやすいファイル名にする工夫を学びました。strftimeで書式を変えるだけで、日付や時間を含むファイル名を自動生成できるのは、ログ管理やバックアップ処理などでも非常に有用です。 十二時間制と午前午後の表現についても確認しておきました。二十四時間制の表記が一般的な場面では%Hを使えば十分ですが、ユーザー向けの画面や海外向けのサービスでは、十二時間制で「午前」「午後」や「AM」「PM」を表示したいことがあります。そのような場合は、%Iと%pを組み合わせて「02:30:15 PM」のような形式を作ることができます。日本語の画面に合わせて「午前」「午後」という文字に置き換えたいときには、文字列を置換するなど、簡単な工夫で対応できます。 注意点としては、strftimeはあくまでdatetimeオブジェクトに対して使う機能であり、すでに文字列になっているデータには直接使えないことも学びました。文字列をいきなりstrftimeしようとしてエラーになるのは、初心者がつまずきやすいポイントのひとつです。その場合は、先にstrptimeを使って「文字列からdatetimeオブジェクトへ変換する」手順を踏んでから、strftimeで整形するのが正しい流れでした。また、%の書き忘れやスペルミスをすると、思っていたのとは違う出力になったりエラーが出たりするため、フォーマット文字列を作るときには落ち着いて確認することも大切です。 このように、Pythonで日付をフォーマットする考え方を身につけると、単に現在時刻を表示するだけでなく、「見せ方」や「使い方」まで含めたきめ細かい日時処理ができるようになります。ふだんの学習では数字だけの出力でも問題ないように見えますが、実際のシステムでは利用者にとって読みやすい表示が求められます。strftimeを自由に使いこなせるようになることは、Pythonで実用的なプログラムを書くうえでの大きな一歩だと言えるでしょう。
日付フォーマットの流れをまとめたサンプルプログラム
ここからは、記事全体の内容をひとつの流れとして復習できるように、よく使うフォーマットをまとめて試せるサンプルコードを紹介します。現在時刻の取得、日本語形式への変換、曜日の日本語表示、ファイル名用のフォーマットなど、実務で役に立つ形をひととおり網羅しています。
import datetime
# 現在の日時を取得
now = datetime.datetime.now()
# 日本語での基本的な日付表示
basic = now.strftime("%Y年%m月%d日 %H時%M分%S秒")
# 曜日を日本語に変換するための対応表
weekday_map = {
"Mon": "月",
"Tue": "火",
"Wed": "水",
"Thu": "木",
"Fri": "金",
"Sat": "土",
"Sun": "日",
}
weekday_en = now.strftime("%a")
weekday_ja = weekday_map[weekday_en]
jp_with_weekday = now.strftime(f"%Y年%m月%d日({weekday_ja}) %H時%M分")
# ファイル名として使いやすい形式
file_name = now.strftime("backup_%Y%m%d_%H%M%S.log")
# 十二時間制と午前午後の表示
twelve_hour = now.strftime("%Y-%m-%d %I:%M:%S %p")
print("基本の日本語表示:", basic)
print("日本語の曜日つき表示:", jp_with_weekday)
print("ファイル名用の形式:", file_name)
print("十二時間制の表示:", twelve_hour)
このサンプルプログラムを実行すると、同じ日時からさまざまな表現が得られることが分かります。表示したい画面や用途に応じて、必要なフォーマットだけを選んで使うようにすれば、Pythonでの日付フォーマットがぐっと実践的になります。実際に自分の環境で実行しながら、書式文字列を少しずつ変えてみると、strftimeの仕組みが体感として理解できるようになるでしょう。
生徒「きょうの内容で、Pythonで日付を自由にフォーマットできることがよく分かりました。同じ日時でも、書式を変えるだけで印象が全然ちがいますね。」
先生「そのとおりですね。同じ情報でも、どう見せるかを工夫できるのがstrftimeの魅力です。日本語の形式にしたり、ファイル名用に整えたりと、いろいろ応用できます。」
生徒「%Yとか%mとか最初は覚えにくいかなと思ったんですけど、実際に手を動かしてみたら、なんとなくパターンがつかめてきました。」
先生「よく使う記号は自然と覚えていきますから、あまり気負わなくて大丈夫ですよ。分からなくなったときに調べながら書いていけば、少しずつ身についていきます。」
生徒「曜日を日本語に変えるところもおもしろかったです。対応表を用意しておけば、日付の表示が一気に日本語らしくなりますね。」
先生「そうですね。辞書の仕組みと組み合わせると、こういう細かいカスタマイズがしやすくなります。Pythonの基本的なデータ構造と日時処理を組み合わせる良い練習にもなりますよ。」
生徒「ファイル名に日付を入れる例も、とても実用的だと思いました。あとで見返すときに、いつ作られたログなのか一目で分かるのは便利ですね。」
先生「日付つきのファイル名は、バックアップやログ管理では定番のテクニックです。strftimeを使えば、わざわざ計算しなくても自動的に分かりやすい名前が作れます。」
生徒「これからは、単にprintで日時を出すだけじゃなくて、用途に合わせてフォーマットを工夫してみようと思います。」
先生「それはとても良い姿勢ですね。Pythonで日付や時刻を扱うときには、datetimeとstrftimeをセットで思い出せるようにしておくと、プログラムの表現力がぐっと高まります。ぜひいろいろ試してみてください。」