Pythonで日付や時間を扱う標準ライブラリ datetime モジュールには、目的に応じて使い分けるべき4つの主要なデータ型(クラス)が存在します。
それぞれの役割と違いを理解することで、スケジュールの計算やログの記録などを正確に実装できます。
目次
主要なデータ型の役割一覧
| データ型 (クラス名) | 役割 | 保持する情報 | 具体例 |
date | 日付のみを扱う | 年、月、日 | 2025-12-15 (生年月日、記念日など) |
time | 時刻のみを扱う | 時、分、秒、マイクロ秒 | 14:30:00 (開始時刻、定時など) |
datetime | 日付と時刻の両方を扱う | 年月日 + 時分秒 | 2025-12-15 09:00:00 (ログ記録、スケジュール) |
timedelta | 時間の差分・期間を扱う | 日数、秒数など | 7 days (1週間後、経過時間の計算) |
実装例:プロジェクトスケジュールの計算
これら4つの型を組み合わせた、実践的なコード例を紹介します。
「現在の日時を取得」し、「特定の期間(timedelta)」を加算して締め切り日を算出するシナリオです。
ソースコード
from datetime import date, time, datetime, timedelta
# --- 1. datetime: 現在の日時を取得 ---
# システムの現在時刻を取得します
current_dt = datetime.now()
print(f"現在日時 (datetime) : {current_dt}")
# --- 2. date: 特定の日付を作成 ---
# 年、月、日を指定してオブジェクトを作成します
# 例: プロジェクトのキックオフ日
kickoff_date = date(2025, 4, 1)
print(f"開始日 (date) : {kickoff_date}")
# --- 3. time: 特定の時間を指定 ---
# 時、分、秒を指定します
# 例: 毎日行われる定例ミーティングの時間
meeting_time = time(9, 30, 0) # 09:30:00
print(f"会議時間 (time) : {meeting_time}")
# --- 4. timedelta: 日時の計算(加算・減算) ---
# 時間の「長さ」や「差」を表現します
# 例: プロジェクト期間は「2週間と3日」
project_duration = timedelta(weeks=2, days=3)
# 開始日に期間を足して、終了予定日を計算
# date型 + timedelta型 = date型
end_date = kickoff_date + project_duration
print("-" * 30)
print(f"プロジェクト期間 : {project_duration}")
print(f"終了予定日 : {end_date}")
# --- おまけ: 日付の差分計算 ---
# 日付同士を引き算すると、timedelta(期間)が返されます
days_until_kickoff = kickoff_date - date.today()
print(f"開始まであと : {days_until_kickoff.days} 日")
実行結果
現在日時 (datetime) : 2025-12-15 10:00:00.123456
開始日 (date) : 2025-04-01
会議時間 (time) : 09:30:00
------------------------------
プロジェクト期間 : 17 days, 0:00:00
終了予定日 : 2025-04-18
開始まであと : -258 日
(※実行結果の日付は実行タイミングにより異なります。上記の「開始まであと」は過去の日付を指定した例として負の値になっています)
解説
- 演算の互換性:
dateやdatetimeに対してtimedeltaを足し引きすることで、「N日後」「N時間前」といった計算が簡単に行えます。date型同士、またはdatetime型同士を引き算すると、その結果はtimedelta型になります(経過時間の取得)。
- 注意点:
date型(日付のみ)とdatetime型(日付+時間)を直接足し引きすることはできません。どちらかの型に合わせて変換する必要があります。
