«Ошибка» перехода на летнее время

Вот расчет количества часов между двумя последовательными днями:

(AbsoluteTime[{2011, 3, 14}] - AbsoluteTime[{2011, 3, 13}]) / 3600

Так что вы можете не удивиться тому, что Mathematica возвращает 24 . But it is surprising. Every other programming language will say 23 because March 13 was the start of Daylight Savings Time. I need my Mathematica program to be consistent with other languages in this regard. What would you recommend?

To be clear about the problem: AbsoluteTime[{2011,3,13}] gives 3508963200. Subtract the unix epoch and that's a unixtime of 1299988800. But give that unixtime to any other programming language and ask it what date it corresponds to and it will say March 12 instead of March 13. (The same thing will work fine for March 14.)

(OK, I know you're dying to know why I'd want to conform to all those clearly broken languages. Ну, во-первых, в других языках есть смысл: благодаря «прыжку вперед» полночь 14 марта была 23 часа после полуночи 13 марта. Почему меня действительно волнует: мы используем unixtime как каноническое представление дат. Поэтому, когда я хочу передать "2011-03-13 00:00 EST" другой программе, я отправляю AbsoluteTime минус эпоха unix. Это прекрасно работает в системе Mathematica. Когда я конвертирую это unixtime обратно, я снова получаю «2011-03-13 00:00 EST». Но если я отправлю это unixtime в другую программу, она интерпретирует его как «2011-03-12 23:00 EST», что оказывается проблемой, поскольку это вчерашний день.)

9
задан dreeves 26 April 2011 в 21:25
поделиться