32位红宝石1.9.2p290时间不能处理2038?

时间:2013-08-08 03:40:40

标签: ruby linux year2038

32位ruby 1.9.2p290(我必须使用),似乎很难在当前时间内添加25(但不是24!)年。

now = Time.now
more_time = (24*365*24*60*60)
puts "more_time.class = #{more_time.class}"
later = now + more_time

now = Time.now
more_time = (25*365*24*60*60)
puts "more_time.class = #{more_time.class}"
later = now + more_time

产地:

  

more_time.class = Fixnum

     

more_time.class = Fixnum

     

ruby​​_time.rb:11:在'+':时间+ 788400000.000000超出时间范围(RangeError)来自ruby_time.rb:11

我遇到了2038年的问题吗?我对64位ruby 1.9.2-p290没有这个问题。

1 个答案:

答案 0 :(得分:6)

32位Ruby使用32位来表示时间,因此它具有从13 Dec 1901 20:45:54 UTC19 Jan 2038 03:14:07 UTC的有效范围,因为它们是可用32位表示的最小/最大有符号整数值,随时间变化0为unix纪元时间(1 Jan 1970 00:00:00 UTC)。

64位Ruby使用64位来表示时间,因此它具有基本上任何有效的范围。

要解决此问题,您可以考虑使用DateTime类,该类不限于32位。