🐍 Python

比較演算子で日時を比較・ソートする

datetimeオブジェクトは<や>、==のような比較演算子をそのまま使え、数値と同じ感覚で「どちらが先か」を判定できます。sorted()やmin()/max()にもそのまま渡せます。

dt1 < dt2   # dt1がdt2より前ならTrue
dt1 == dt2  # 完全に同じ日時ならTrue
sorted([dt1, dt2, ...])  # 時系列順に並べ替え
from datetime import datetime

a = datetime(2026, 8, 10)
b = datetime(2026, 8, 11)
print(a < b)
# True
print(a == datetime(2026, 8, 10))
# True
print(a > b)
# False
# sorted()やmin()にそのまま使える
from datetime import datetime

dates_list = [datetime(2026, 8, 15), datetime(2026, 8, 10), datetime(2026, 8, 20)]
print(sorted(dates_list))
# [datetime.datetime(2026, 8, 10, 0, 0), datetime.datetime(2026, 8, 15, 0, 0), datetime.datetime(2026, 8, 20, 0, 0)]
print(min(dates_list))
# 2026-08-10 00:00:00
# naive(タイムゾーン無し)とaware(タイムゾーン付き)は比較できない
from datetime import datetime, timezone

naive = datetime(2026, 8, 10)
aware = datetime(2026, 8, 10, tzinfo=timezone.utc)
try:
    naive < aware
except TypeError as e:
    print("TypeError:", e)
# TypeError: can't compare offset-naive and offset-aware datetimes
比較演算子の対応関係
< / > / <= / >=
naiveとaware同士を混在させるとTypeErrorになる
== / !=
naiveとaware同士でも例外にはならず、単に「等しくない」(==はFalse)と判定される点が<系と異なる
💡 AIコードレビュー観点:==はエラーにならず静かに常時Falseになる

<や>でnaiveとawareを比較すると例外で気づけますが、==で比較した場合は例外にならず、常にFalseを返します。「保存された日時と現在時刻が一致するか」を==で判定するコードで、片方だけタイムゾーンが付いていると、実際には一致していても永久にFalseと判定される静かなバグになります。AIが生成したコードで日時の==比較を見つけたら、両辺が同じくnaive/awareかを確認しましょう。

← Python datetime クイックリファレンス一覧へ戻る / timedeltaで日時の加減算をする →