AbsoluteTime с числовым аргументом ведет себя странно - PullRequest
0 голосов
/ 14 июня 2010

Это странно:

DateList@AbsoluteTime[596523]

возвращает

{2078, 7, 2, 2, 42, 9.7849}

Но

DateList@AbsoluteTime[596524]

возвращает

{1942, 5, 26, 20, 28, 39.5596}

Вопрос: чтопродолжается?Обратите внимание, что AbsoluteTime с числовым аргументом недокументирован.

(я думаю, что теперь я знаю, что он делает, но решил, что это полезно иметь в качестве вопроса StackOverflow для будущей ссылки; и мне любопытно, если есть какая-то причина дляэто волшебное число 596523.)

PS: Я сталкивался с этим при написании этих служебных функций для преобразования во время Unix и обратно в Mathematica:

(* 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.        *)

Ответы [ 2 ]

5 голосов
/ 14 июня 2010

Если вы преобразуете 596524 и 596523 из часов в секунды (умножьте на 3600), вы увидите, что большее число больше 2 ^ 31-1 (максимальное 32-разрядное целое число со знаком), а меньшее число не ,

2 голосов
/ 14 июня 2010

Вызов AbsoluteTime[x], где x - целое число (недокументированное) ярлык для AbsoluteTime[TimeZone->x]. Нормальные значения для x тогда будут от -12 до +12, но они, к счастью, прибавляют или вычитают из UTC вплоть до полумиллиона, если вы скажете это. Почему это внезапно сходит с ума в 596 524, я не знаю. Но я думаю, что один разумный ответ - «просто не делай этого!».

PS: другой ответ раскрывает тайну магии 596,524 часов. Это (2^31-1)/3600, т.е. наибольшее количество секунд, которое вы можете сохранить в 32-разрядном целом числе без знака.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...