ruby 1.9.3dev(2011-09-23 修订版 33323)[i686-linux]
导轨 3.0.20
最近为什么要在与 Rails 上的 DateTime 相关的 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对值进行的比较虽然源日期对象失败,我将不胜感激表示相同的日期时间。
谢谢,
吉涅什