32位ruby 1.9.2p290时间can';我不能处理2038?
32位ruby 1.9.2p290(我必须使用)似乎很难在当前时间的基础上增加25年(但不是24年)32位ruby 1.9.2p290时间can';我不能处理2038?,ruby,linux,year2038,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 = #
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\u time.class=Fixnum
more\u time.class=Fixnum
ruby_time.rb:11:in`+':time+788400000.000000超出ruby_time的时间范围(RangeError)。rb:11
我遇到2038年的问题了吗?64位ruby 1.9.2-p290没有这个问题。32位ruby使用32位表示时间,因此它的有效范围是从
13 Dec 1901 20:45:54 UTC
到19 Jan 2038 03:14:07 UTC
,因为这些是可以用32位表示的最小/最大有符号整数值,时间0是unix历元时间(1970年1月1日UTC 00:00:00
)
64位Ruby使用64位来表示时间,因此它的有效范围基本上是任何东西
要解决这个问题,您可以研究使用这个类,它不限于32位