DateとTimeの比較
たまたま、DateとTimeを意図せず比較している処理があったので調べてみた。 Date同士の比較であれば日付があっていれば 等しくなるので当たり前だけど
Date.new(2023, 1, 1) == Date.new(2023, 1, 1) # true
これが片方が Timeの場合
Date.new(2023, 1, 1) == Time.local(2023, 1, 1) # false
一致しないのだけど これはRailsのirbで比較しているので zone が設定されていて
Time.local(2023, 1, 1) # 2023-01-01 00:00:00 +0900
になっている。 なので 同一であるためには Tokyoの場合は9時間ずれているので 9時で比較すると 同等とされる
Date.new(2023, 1, 1) == Time.local(2023, 1, 1, 9) # true
そして9時を境に大小比較されるので
Date.new(2023, 1, 1) < Time.local(2023, 1, 1, 10) # true Date.new(2023, 1, 1) > Time.local(2023, 1, 1, 8) # true
日付だけを考えるとバグを埋め込んでしまう。 全然わかってなかったけどこういう挙動なんだという気づき。