🐍 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かを確認しましょう。