🐍 Python
date / time / datetime の違いと使い分け
datetimeモジュールには似た名前のクラスが3つあります。dateは年月日のみ、timeは時分秒のみ、datetimeはその両方を持ちます。それぞれ別のクラスなので、うっかり混同すると型エラーの原因になります。
date(year, month, day) # 年月日のみ
time(hour, minute, second) # 時分秒のみ(日付を持たない)
datetime(year, month, day, hour, ...) # 年月日+時分秒
from datetime import date, time
d_only = date(2026, 8, 10)
print(type(d_only))
#
t_only = time(9, 30, 0)
print(type(t_only))
#
# combine()でdateとtimeを合成してdatetimeを作れる
from datetime import date, time, datetime
d_only = date(2026, 8, 10)
t_only = time(9, 30, 0)
combined = datetime.combine(d_only, t_only)
print(combined)
# 2026-08-10 09:30:00
print(type(combined))
#
# 逆にdatetimeから.date()/.time()で分解できる
from datetime import datetime
dt_full = datetime(2026, 8, 10, 9, 30, 0)
print(dt_full.date())
# 2026-08-10
print(dt_full.time())
# 09:30:00
print(type(dt_full.date()))
#
print(type(dt_full.time()))
#
3クラスの使いどころ
date- 誕生日・締切日・カレンダー表示など、時刻が意味を持たない場面
time- 営業開始時刻・アラーム設定時刻など、日付を問わず「1日のうちの時刻」だけを扱う場面
datetime- ログのタイムスタンプ・予約日時など、日付と時刻の両方が意味を持つ場面
💡 AIコードレビュー観点:3クラスは互いに演算できない組み合わせがある
date同士は引き算できてtimedeltaが得られますが、dateとdatetimeを直接比較・演算しようとするとTypeErrorになります。AIが生成したコードで「date.today()で取得した日付」と「datetime.now()で取得した日時」を混在させて比較しているケースは要注意です。どちらかに統一する(片方をdatetime.combine()で合わせる、あるいは片方を.date()で揃える)必要があります。
← Python datetime クイックリファレンス一覧へ戻る / weekday/isoweekdayで曜日を取得する →