ruby 1.9.3dev(2011-09-23リビジョン33323)[i686-linux]
Rails 3.0.20
最近、DateTime on Railsに関連するRSpecsのプロジェクトに取り組んでいる理由 は、特定の日付に次のステートメントによって出力される値であることがわかりました。
date.end_of_day.to_datetime
と
date.to_datetime.end_of_day
比較すると、同じ日時を表していますが、falseが返されました。
これを確認するために、Railsコンソールを開いて、次のことを試してみました
1.9.3dev :053 > monday = Time.now.monday
=> 2013-02-25 00:00:00 +0530
1.9.3dev :054 > monday.class
=> Time
1.9.3dev :055 > d1 = monday + 1.hour
=> 2013-02-25 01:00:00 +0530
1.9.3dev :056 > d2 = monday + 1.hour
=> 2013-02-25 01:00:00 +0530
1.9.3dev :058 > d1_eod_datetime = d1.end_of_day.to_datetime
=> Mon, 25 Feb 2013 23:59:59 +0530
1.9.3dev :059 > d2_eod_datetime = d2.to_datetime.end_of_day
=> Mon, 25 Feb 2013 23:59:59 +0530
1.9.3dev :061 > d1_eod_datetime == d2_eod_datetime
=> false
1.9.3dev :062 > d3_eod_datetime = d2.to_datetime.end_of_day
=> Mon, 25 Feb 2013 23:59:59 +0530
1.9.3dev :063 > d2_eod_datetime == d3_eod_datetime
=> true
私の観察は正しいように見えます。それは:
d1_eod_datetimeとd2_eod_datetimeを比較すると、falseが返されます
d2_eod_datetimeとd3_eod_datetimeを比較すると、trueが返されます。
私には一貫性のない動作のように見えますが、誰かが舞台裏で何が起こっているのか、そしてdate.end_of_day.to_datetimeと date.to_datetime.end_of_dayを使用して値に対して行われた比較がソース日付オブジェクトを介して失敗する理由を誰かに理解してもらうことができれば幸いです同一の日時を表します。
ありがとう、
ジグネシュ