3

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:in `+': time + 788400000.000000 out of Time range (RangeError) from ruby​​_time.rb:11

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

4

1 回答 1

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 位的类。

于 2013-08-08T03:49:54.290 回答