Rails如何处理TimeWithZone和Date对象之间的比较?

时间:2017-08-28 16:39:56

标签: ruby-on-rails ruby

这可能会引入微妙的“错误”(感知不一致),如下所示:

>> Time.zone.parse('Tue, 01 Aug 2017 00:00:00 CEST +02:00') < Date.new(2017,8,1)
=> true

似乎Rails将Date转换为具有'00:00:00 UTC'的DateTime或TimeWithZone对象,因此结果。像这样:

>> Date.new(2017,8,1).to_datetime
=> Tue, 01 Aug 2017 00:00:00 +0000

这可以解释它。但我想知道Rails实际上是如何做到的,以及它在过程中将它转换为什么类型的对象,当然。我没有在API文档或源代码中找到它,但也许有人可以一步一步解释。

我查看的来源是:compare_with_coercion

PS:对我来说,在这种类型的比较中,Rails实际上会将TimeWithZone对象转换为Date对象,从而导致只比较日期部分,这样看起来似乎更为理智,因此:

>> Time.zone.parse('Tue, 01 Aug 2017 00:00:00 CEST +02:00') == Date.new(2017,8,1)
=> true

价:

DateTime API doc

Date API doc

0 个答案:

没有答案
相关问题