Rails TimeWithZone和闰年

时间:2016-02-29 15:21:54

标签: ruby-on-rails activesupport

今天是2月29日:我们的测试破坏的那一天。

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

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

1 个答案:

答案 0 :(得分:0)

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

   for(i=0; i<26; i++){
     ...  
     while(wait(NULL)>0);
   }
   exit(EXIT_SUCCESS);

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

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

除非你使用beginning_of_day:

Time.zone.now
 => Tue, 01 Mar 2016 15:11:51 UTC +00:00 
Time.zone.now == Time.zone.now - 1.year + 1.year
 => false 

此外,这取决于你实际上要做什么...为什么要测试(Time.zone.now - 1.day).beginning_of_day == ((Time.zone.now - 1.day) - 4.year + 4.year).beginning_of_day => true

也...

Time.now - 1.year + 1.year