Debugging 带数值参数的绝对时间行为异常

Debugging 带数值参数的绝对时间行为异常,debugging,datetime,wolfram-mathematica,Debugging,Datetime,Wolfram Mathematica,这很奇怪: DateList@AbsoluteTime[596523] 返回 {2078, 7, 2, 2, 42, 9.7849} {1942, 5, 26, 20, 28, 39.5596} 但是 返回 {2078, 7, 2, 2, 42, 9.7849} {1942, 5, 26, 20, 28, 39.5596} 问题是:发生了什么? 请注意,带有数字参数的AbsoluteTime是未记录的 (我想我现在知道它在做什么了,但我认为这是一个有用的问题,可以作为一个StackOv

这很奇怪:

DateList@AbsoluteTime[596523]
返回

{2078, 7, 2, 2, 42, 9.7849}
{1942, 5, 26, 20, 28, 39.5596}
但是

返回

{2078, 7, 2, 2, 42, 9.7849}
{1942, 5, 26, 20, 28, 39.5596}
问题是:发生了什么? 请注意,带有数字参数的AbsoluteTime是未记录的

(我想我现在知道它在做什么了,但我认为这是一个有用的问题,可以作为一个StackOverflow问题供将来参考;我很好奇,这个神奇的596523数字是否有什么原因。)

PS:我在Mathematica中编写这些用于转换unix时间的实用程序函数时遇到了这种情况:

(* Using Unix time (an integer) instead of Mathematica's AbsoluteTime...      *)
tm[x___] := AbsoluteTime[x]            (* tm is an alias for AbsoluteTime.    *)
uepoch = tm[{1970}, TimeZone->0];      (* unixtm works analogously to tm.     *)
unixtm[x___] := Round[tm[x]-uepoch]    (* tm & unixtm convert between unix &  *)
unixtm[x_?NumericQ] := Round[x-uepoch] (*  mma epoch time when given numeric  *)
tm[t_?NumericQ] := t+uepoch            (*  args. Ie, they're inverses.        *)

调用
AbsoluteTime[x]
其中x是整数是
AbsoluteTime[TimeZone->x]
的一个(未记录的)快捷方式。 那么x的正常值是-12到+12,但如果你告诉它,它很乐意从UTC加上或减去50万次。 我不知道为什么它会在596524突然发疯。 但我想一个合理的答案是“不要那样做!”


另一个答案揭示了魔法的奥秘596524小时。这是
(2^31-1)/3600
,也就是说,可以存储在无符号32位整数中的最大秒数。

如果将596524和596523从小时转换为秒(乘以3600),您将看到较大的数字大于2^31-1(最大32位有符号整数值),而较小的数字则不大于2^31-1

我期望一种新的科学中所概述的规则能够让Wolfram Alpha确定(A)世界开始的日期和时间(b)世界何时结束,以及(c)我们毕竟生活在一个循环的宇宙中。尽管如此,我还是很惊讶每次迭代的寿命只有140年左右。