6

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_datetimedate.to_datetime.end_of_dayを使用して値に対して行われた比較がソース日付オブジェクトを介して失敗する理由を誰かに理解してもらうことができれば幸いです同一の日時を表します。

ありがとう、

ジグネシュ

4

1 に答える 1