Rails TimeWithZone和闰年

Gui*_*rme 6 ruby-on-rails activesupport

今天是2月29日:我们的测试破坏了.

我们的测试失败了,因为这些测试做的事情最终可以与这样的命令进行比较:Time.zone.now - 1.year + 1.year.它碰巧等于Time.zone.now.

为什么会这样?为什么ActiveSupport不能在这样的计算中处理闰年?它是否适用于时间戳,这会阻止这类问题的发生?

小智 0

您可以使用 4 年而不是 1 年来达到相同的效果。(注:- 1.day,因为现在是 3 月 1 日)

(Time.zone.now - 1.day) - 4.year + 4.year
 => Mon, 29 Feb 2016 15:12:58 UTC +00:00
Run Code Online (Sandbox Code Playgroud)

值得注意的是(如下),无论日期如何。

Time.zone.now
 => Tue, 01 Mar 2016 15:11:51 UTC +00:00 
Time.zone.now == Time.zone.now - 1.year + 1.year
 => false 
Run Code Online (Sandbox Code Playgroud)

除非你使用beginning_of_day:

(Time.zone.now - 1.day).beginning_of_day == ((Time.zone.now - 1.day) - 4.year + 4.year).beginning_of_day
 => true 
Run Code Online (Sandbox Code Playgroud)

另外,这取决于您实际想要做什么...您为什么要测试Time.now - 1.year + 1.year

还...

1.year == 365.days
 => false 
1.year == 365.25.days
 => true 
Run Code Online (Sandbox Code Playgroud)