言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Python辞典

  1. トップページ
  2. Python辞典
  3. 日時.strftime() / datetime.strptime()

日時.strftime() / datetime.strptime()

対応: Python 2(2000)

日時オブジェクトを任意の書式の文字列に変換したり、書式付き文字列から日時オブジェクトを生成したりする関数です。

構文

from datetime import datetime

# 日時オブジェクトを書式付き文字列に変換する
文字列 = 日時オブジェクト.strftime(書式文字列)

# 書式付き文字列から日時オブジェクトを生成する
日時 = datetime.strptime(文字列, 書式文字列)

主な書式コード一覧

書式コード概要
%Y4桁の年(例: 『2025』)です。
%m2桁の月(01〜12)です。
%d2桁の日(01〜31)です。
%H24時間制の2桁の時(00〜23)です。
%M2桁の分(00〜59)です。
%S2桁の秒(00〜59)です。
%A英語の曜日名(例: 『Monday』)です。
%a英語の短縮曜日名(例: 『Mon』)です。
%B英語の月名(例: 『April』)です。
%b英語の短縮月名(例: 『Apr』)です。
%I12時間制の時(01〜12)です。
%p『AM』または『PM』です。
%fマイクロ秒(000000〜999999)です。

サンプルコード

datetime_strftime.py
from datetime import datetime

# 日時オブジェクトを様々な書式で表示する
now = datetime(2025, 4, 15, 9, 30, 0)

# 日本語風の書式
print(now.strftime('%Y年%m月%d日 %H時%M分%S秒'))
# 『2025年04月15日 09時30分00秒』と出力される

# ISO 8601 形式
print(now.strftime('%Y-%m-%dT%H:%M:%S'))
# 『2025-04-15T09:30:00』と出力される

# スラッシュ区切りの日付
print(now.strftime('%Y/%m/%d'))
# 『2025/04/15』と出力される

# 12時間制で曜日付き
print(now.strftime('%Y年%m月%d日 (%A) %I:%M %p'))
# 『2025年04月15日 (Tuesday) 09:30 AM』と出力される

# strptime() で文字列から日時を生成する
date_str = '2025-04-15 09:30:00'
dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
print(dt) # 『2025-04-15 09:30:00』と出力される
print(type(dt)) # 『<class 'datetime.datetime'>』と出力される

# 日本語形式の文字列を解析する
jp_str = '2025年4月15日'
dt2 = datetime.strptime(jp_str, '%Y年%m月%d日')
print(dt2.year) # 『2025』と出力される
print(dt2.month) # 『4』と出力される

# Webフォームで受け取った日付を変換する例
form_input = '15/04/2025'
dt3 = datetime.strptime(form_input, '%d/%m/%Y')
formatted = dt3.strftime('%Y-%m-%d')
print(formatted) # 『2025-04-15』と出力される

実行すると次のように出力されます。

python3 datetime_strftime.py
2025年04月15日 09時30分00秒
2025-04-15T09:30:00
2025/04/15
2025年04月15日 (Tuesday) 09:30 AM
2025-04-15 09:30:00
<class 'datetime.datetime'>
2025
4
2025-04-15

よくあるミス

よくあるミス1: strftimeとstrptimeの混同

『strftime()』はdatetimeオブジェクトを文字列に変換します。『strptime()』は文字列からdatetimeオブジェクトを作成します。名前が似ているため混同しやすいです。

from datetime import datetime

dt = datetime(2025, 4, 15, 9, 30, 0)

# strftime: datetime → 文字列(format time)
date_str = dt.strftime('%Y/%m/%d')
print(date_str) # '2025/04/15'
print(type(date_str)) # <class 'str'>

# strptime: 文字列 → datetime(parse time)
dt2 = datetime.strptime('2025/04/15', '%Y/%m/%d')
print(dt2) # 2025-04-15 00:00:00
print(type(dt2)) # <class 'datetime.datetime'>

よくあるミス2: フォーマット記号の大文字・小文字の違い

フォーマット記号は大文字・小文字で意味が異なります。特に『%m』(月)と『%M』(分)の混同が多いです。

%m は月(04)、%M は分(30)を表します。

from datetime import datetime

dt = datetime(2025, 4, 15, 9, 30, 0)

# 日時フォーマットで%mと%Mを混同
wrong = dt.strftime('%Y/%M/%d') # 月に%M(分)を使ってしまった
print(wrong) # '2025/30/15'(おかしな値)

次のように記述します。

from datetime import datetime

dt = datetime(2025, 4, 15, 9, 30, 0)

correct = dt.strftime('%Y/%m/%d %H:%M')
print(correct) # '2025/04/15 09:30'

概要

『strftime()』は「string format time」の略で、日時オブジェクトを任意のフォーマットの文字列に変換します。『strptime()』は「string parse time」の略で、書式付き文字列から日時オブジェクトを生成します。どちらも同じ書式コードを使うため、覚えておくと両方に活用できます。

書式コードはOSによって挙動が微妙に異なる場合があります。たとえば月や日の先頭ゼロを取り除くコード(Linuxの『%-m』)はWindowsでは動作しません。ゼロ埋めが不要な場合は文字列を変換後に『lstrip("0")』で除去するほうが移植性が高いです。

日時オブジェクトの生成は『datetime.datetime() / datetime.date() / datetime.time()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。