Pythonで日付データ(date 型)をCSVやログから読み込むために「文字列から変換」したり、逆に画面表示のために「文字列へ変換」したりする処理は非常に頻繁に行われます。
datetime 型と同様に strptime と strftime メソッドを使用しますが、date 型特有のポイント(.date() メソッドの使用など)を含めて解説します。
目次
実装例:日付形式の変換処理
ここでは、スラッシュ区切りの日付文字列 "2025/10/12" を読み込み、date オブジェクトとして処理した後、ハイフン区切りの文字列 "2025-10-12" に変換して出力するシナリオを実装します。
ソースコード
from datetime import datetime, date
# --- 1. 文字列から date オブジェクトへの変換 ---
input_str = "2025/10/12"
# step 1: datetime.strptime(文字列, フォーマット) で datetime型に変換
# %Y: 西暦4桁, %m: 月, %d: 日
dt_obj = datetime.strptime(input_str, "%Y/%m/%d")
# step 2: .date() メソッドで、時刻情報を切り捨てて date型を取得
d_obj = dt_obj.date()
print(f"変換後の型 : {type(d_obj)}")
print(f"日付データ : {d_obj}")
print("-" * 30)
# --- 2. date オブジェクトから文字列への変換 ---
# strftime(フォーマット) を使用して、任意の形式の文字列にする
# ここでは "YYYY-MM-DD" 形式に変換
output_str = d_obj.strftime("%Y-%m-%d")
print(f"出力文字列 : {output_str}")
print(f"出力の型 : {type(output_str)}")
実行結果
変換後の型 : <class 'datetime.date'>
日付データ : 2025-10-12
------------------------------
出力文字列 : 2025-10-12
出力の型 : <class 'str'>
解説
文字列 → date (strptime)
datetime.strptime() は、常に「日付+時刻」を持つ datetime オブジェクトを返します。 そのため、date 型(日付のみ)として扱いたい場合は、末尾に .date() メソッドを呼び出して変換する必要があります。
- 構文:
datetime.strptime(date_string, format).date()
date → 文字列 (strftime)
date オブジェクトが持つ strftime() メソッドを使うことで、指定した書式の文字列に変換できます。
- 構文:
date_object.strftime(format) - 主な書式:
%Y/%m/%d→ 2025/10/12%Y-%m-%d→ 2025-10-12%d %B %Y→ 12 October 2025
補足:ISO形式の場合
Python 3.7以降、"2025-10-12" のような標準的なISO 8601形式(ハイフン区切り)であれば、より高速な date.fromisoformat() メソッドが利用可能です。
d = date.fromisoformat("2025-10-12")
