【一人 bugs.ruby Advent Calendar 2020】[Bug #15712] DateTime#=== should be defined and compare date and time instead of just the date【6日目】

一人 bugs.ruby Advent Calendar 2020 6日目の記事になります。

[Bug #15712] DateTime#=== should be defined and compare date and time instead of just the date

このチケットは DateTime#=== で比較する際に日付だけ考慮して時刻を考慮せずに比較されているというバグ報告です。

require "date"

dt1 = DateTime.new(2001, 2, 3)
dt2 = DateTime.new(2001, 2, 3, 12)

# #== は DateTime で再定義されているので時間まで見る
p dt1 == dt2    # => false

# #=== は Date#=== を使用するので時間の部分を無視して比較される
p dt1 === dt2   #=> true

この挙動は実際にバグではあるんですが DateTime 自体が非推奨の機能なので修正するよりは互換性を重視して挙動は現状のままにする、という判断がされました。
対応としてはドキュメントに DateTime class is considered deprecated. Use Time class. という文言が追加されるような対応になりました。

こんな感じで非推奨な機能のバグは修正されない可能性があるので DateTime は使わないようにしましょう。