在Rails中,为什么1.year.from_now与1.year.to_i.seconds.from_now不一样?

时间:2016-03-23 18:52:31

标签: ruby-on-rails ruby dst

我可以让Rails在几秒钟内对我的计算应用相同的逻辑,就像我多年来的计算一样吗?

puts "#{1.year.from_now} | #{1.year.to_i.seconds.from_now}"
 2017-03-23 18:48:06 UTC | 2017-03-24 00:48:06 UTC

我不明白6小时差异的来源。

1 个答案:

答案 0 :(得分:10)

差异 6小时。这是因为1年秒(由to_i方法转换)在Ruby on Rails核心扩展中被定义为 365.25天

>> 1.year.to_i / 60 / 60 / 24.0
=> 365.25

这0.25天是实际的6小时差异。通过这样做,RoR试图计算闰年(basic approximation)在4年内发生一次。 Rails source code中的years定义也是如此。

另一方面,1.year.from_now改变了具体的日历日期时间。就像你在挂历上翻页一样。