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没有这个问题。
答案 0 :(得分:6)
32位Ruby使用32位来表示时间,因此它具有从13 Dec 1901 20:45:54 UTC
到19 Jan 2038 03:14:07 UTC
的有效范围,因为它们是可用32位表示的最小/最大有符号整数值,随时间变化0为unix纪元时间(1 Jan 1970 00:00:00 UTC
)。
64位Ruby使用64位来表示时间,因此它具有基本上任何有效的范围。
要解决此问题,您可以考虑使用DateTime
类,该类不限于32位。