【发布时间】:2011-04-26 17:53:09
【问题描述】:
以下是连续两天之间小时数的计算:
(AbsoluteTime[{2011, 3, 14}] - AbsoluteTime[{2011, 3, 13}]) / 3600
所以您可能不会对 Mathematica 返回24 感到惊讶。
但这令人惊讶。其他所有编程语言都会说 23,因为 3 月 13 日是夏令时的开始。
我需要我的 Mathematica 程序在这方面与其他语言保持一致。
你会推荐什么?
要明确问题:AbsoluteTime[{2011,3,13}] 给出3508963200。减去 unix 纪元,这是 1299988800 的 unixtime。但是将那个 unixtime 给任何其他编程语言并询问它对应的日期,它会说是 3 月 12 日而不是 3 月 13 日。
(同样的事情也适用于 3 月 14 日。)
(好吧,我知道你很想知道我为什么要遵守所有那些明显不合时宜的语言。 嗯,首先,其他语言有一个道理:多亏了“突飞猛进”,3 月 14 日的午夜是 3 月 13 日午夜的 23 小时。 为什么我真正关心:我们使用 unixtime 作为日期的规范表示。因此,当我想将“2011-03-13 00:00 EST”传达给另一个程序时,我发送 AbsoluteTime 减去 unix 纪元。 这在 Mathematica 中运行良好。当我将那个 unixtime 转换回来时,我再次得到“2011-03-13 00:00 EST”。 但是,如果我将该 unixtime 发送到另一个程序,它会将其解释为“2011-03-12 23:00 EST”,结果证明这是一个问题,因为那是前一天。)
【问题讨论】:
-
夏令时是一个可怕的、可怕的混乱,原则上它每年都会以不可预测的方式发生变化,具体取决于你住在哪里。您是否有机会更改规范表示以始终使用 UTC 并忽略 DST?
-
我认为加入 Mathematica usenet 组可以找到更多答案
-
"
AbsoluteTime[]使用您计算机系统上设置的任何日期和时间。它不会对时区、夏令时等进行更正。" -
(另外,你需要把减法用括号括起来。我试图修复它,但编辑必须至少有六个字符。)
-
(感谢@Brett;已修复。在测试时我只是在几秒钟内完成,因为我习惯了 86400 作为一天中的秒数。然后我想我在这方面可能很奇怪,并且认为我应该转换为小时。)
标签: datetime wolfram-mathematica