結論から言うと、datetime は日付や時刻をPythonで扱うための標準ライブラリです。
実務の自動化では、今日の日付をファイル名に入れたり、期限日までの日数を計算したり、CSVに入っている日付文字列を扱ったりする場面があります。
日付をただの文字列として扱うと、比較や計算がしにくくなります。
この記事では、請求書の期限日を確認する小さな例を使って、datetime の基本を整理します。
この記事でわかること
完成コード
完成コードは次の通りです。
from datetime import date, datetime, timedelta
def parse_date(value: str) -> date:
return datetime.strptime(value, "%Y-%m-%d").date()
def create_invoice_status(invoice_no: str, due_date_text: str, today: date) -> str:
due_date = parse_date(due_date_text)
remaining_days = (due_date - today).days
if remaining_days < 0:
status = "期限切れ"
elif remaining_days == 0:
status = "本日期限"
else:
status = f"残り{remaining_days}日"
file_name = f"{today.isoformat()}_{invoice_no}.txt"
return f"{invoice_no}: {status} / 出力ファイル: {file_name}"
today = date.today()
next_week = today + timedelta(days=7)
print(create_invoice_status("INV-001", today.isoformat(), today))
print(create_invoice_status("INV-002", next_week.isoformat(), today))このコードを実行すると、今日が期限の請求書と、7日後が期限の請求書について、期限状態と出力ファイル名を表示します。
コードのポイント
このコードでは、日付を文字列のまま扱わず、date に変換してから計算しています。
date.today()で今日の日付を取得していますdatetime.strptime()で文字列を日付として読み取っていますtimedelta(days=7)で7日後の日付を作っています- 日付同士を引き算して、期限までの日数を計算しています
isoformat()でファイル名に使いやすい日付文字列に戻しています
日付処理では、文字列、日付、日時を行き来することがよくあります。
それぞれの役割を分けて考えると、処理が読みやすくなります。
コードを順番に説明します
主要な処理を分けて説明します。
1. 文字列を日付に変換します
def parse_date(value: str) -> date:
return datetime.strptime(value, "%Y-%m-%d").date()datetime.strptime() は、文字列を日付や時刻として読み取るための関数です。
ここでは "2026-05-17" のような文字列を、%Y-%m-%d という形式で読み取っています。
strptime() の戻り値は datetime です。
日付だけを使いたいので、最後に .date() を付けて date にしています。
2. 日付同士を引き算します
remaining_days = (due_date - today).daysdate 同士は引き算できます。
期限日から今日の日付を引くと、差分を表す値が得られます。.days を見ると、何日差があるかを整数で取り出せます。
期限日が今日より前なら、差分はマイナスになります。
そのため、マイナスなら期限切れ、ゼロなら本日期限、プラスなら残り日数あり、という判定ができます。
3. timedeltaで未来の日付を作ります
next_week = today + timedelta(days=7)timedelta は、日数や時間の差を表すためのクラスです。timedelta(days=7) を今日の日付に足すと、7日後の日付を作れます。
日付に1週間後や30日後を足したい場面では、文字列を自分で組み立てるのではなく、timedelta を使うと安全です。
月末や年末をまたぐ場合も、日付として計算できます。
4. 日付をファイル名に使います
file_name = f"{today.isoformat()}_{invoice_no}.txt"isoformat() は、日付を "YYYY-MM-DD" 形式の文字列にします。
この形式は並べ替えしやすく、ファイル名にも使いやすい形です。
日付付きのレポートやバックアップファイルを作る場合は、2026-05-17_report.txt のように先頭に日付を入れると、後から探しやすくなります。
実務で使うときのポイント
実務では、日付は文字列のまま扱わず、できるだけ早い段階で date や datetime に変換しておくと処理が安定します。
日付として変換しておけば、比較、並べ替え、差分計算がしやすくなります。
日付だけを扱うなら date、時刻まで扱うなら datetime を使います。
たとえば、請求期限や営業日の日付だけなら date で十分です。
ログの記録時刻や処理開始時刻のように、時間、分、秒まで必要な場合は datetime が向いています。
第6章で扱った pathlib と組み合わせると、日付入りの出力ファイル名を作る処理にも使えます。
ファイル出力やバックアップ処理に日付を入れる場面では、datetime はよく使う標準ライブラリです。