我最近读了很多关于UNIX时间的文章,其中大部分内容不连贯,很多内容相互矛盾。我正在尝试协调UNIX Time (此后,为了简单起见,UXT)、TAI和UTC之间的转换,为此,我需要正确地理解UXT。问题是,我似乎找不到其他人了。
以下是我最努力的解释,通过冗长的研究,从无数的来源重构而来.这在某些地方也是错误的。我正在寻找一个全面的分析和点对点验证/反驳以下内容。本质上,修复以下内容,使其工作。
gmtime或§4.15 ),但您实际上不能通过算术来找到使用它们的任何东西。特别是difftime返回UNIX秒,所以您不能对它做任何事情,包括将它添加到不同的时间戳中,除非您知道所有相关的闰秒都在哪里。我想到目前为止我能理解。
difftime测量持续时间,只是希望它足够好(或者不知道有问题),但是计时库也是错误的。 作为一个例子,libtai提供了从UXT:TAI := 4,611,686,018,427,387,914 + UXT到TAI的转换(tai_now.c:7)。因为TAI是SI秒,而UXT是UNIX秒,所以不能这样做。然而,由于libtai显式地处理跳跃秒,这似乎不合理,这是一个粗心大意的错误。,,这不是libtai特有的。你可以看到这类事情到处都是。因此:第1-6点与第7点不一致,也就是说,大量的现有代码与它所代表的时间标准相矛盾。哪里出了问题?
发布于 2016-05-14 19:56:07
一个问题是,大多数文档都没有使用能够区分时间尺度而没有歧义句的词汇。我建议http://www.ucolick.org/~sla/leapsecs/picktwo.html作为对这个问题的介绍,在历史上有两种不相关的秒--一种是地球居民的日历日的细分,另一种是在特定的参照系中测量的固定的持续时间。任何时候,跨越1970年前后日期的图书馆都试图利用这两种类型的秒,最终提供的答案类似于声称提供arcsin(-2)的函数--也就是说,涉及到的复杂性需要仔细解释和定义被认为重要的东西。
发布于 2018-10-18 13:25:14
你说得对,这个烂摊子糟透了。我的结论是:
UXT和UTC是相同的,除了在闰秒。在那里,UTC数到60,UTX只是“挂起”一秒钟。
发布于 2023-04-03 14:36:10
对你的心理健康最好的是假设每天都有86,400秒,无一例外,这对大多数人来说已经足够了。如果你现在花时间,减去5,000乘以86,400秒,你就会得到同样的时间,分钟和秒,5000天前。
现在Posix时间是UTC,但随着闰秒的移除。这意味着它总是非常接近UT1 (太阳时间),最多0.9秒。最好的心理模型是,每次在UTC中添加或删除一个闰秒,在Posix中,我们将有一个2秒长的秒,或者一个0秒长的秒。你可以观察到,如果你恰好使用一个秒表,那么就会出现一个闰秒--根据Posix的说法,某一分钟会根据你的秒表需要61或59秒。或者,如果您的计算机显示一个秒的时钟,那么秒数就会静止一秒钟,或者在某个时间点跳转两秒。在确切的时刻之外,闰秒被移除,你不能观察到这一点。在Posix系统中没有跟踪这些更改。
这什么时候出了问题?根据Posix时间,如果有一场100米的比赛,就在正确的时间点,你记录开始和结束的时间,有人可以在他们开始后9.317秒完成比赛。实际上是10.317秒。因此,如果你有物理数据,那么时间间隔可能是错误的一秒。
你怎么能修好它?修正它的唯一方法是有一个表,说明何时插入闰秒,并使用这个表将“没有闰秒的UTC”更改为TAI。
请注意,Posix时间实际上并不是没有闰秒的UTC,但是您的系统提供了关于UTC是什么的最佳信息。您可以“手动”更改计算机上的时钟,Posix时间将被关闭。您的计算机上的时钟可能有点不准确,并由时间服务器纠正,在这种情况下,它将漂移可能每天离开世界协调时,然后纠正回来。
我有一个应用程序,这是一个问题,iOS (通常在Posix中)有一个sysctl调用,返回启动时间。该函数返回一个更改的日期,当您的时钟改变时,除了每秒一秒钟的更改外。它还会在重新启动计算机时返回更改的日期。因此,您可以存储最后一个已知值,并在启动时间更改时询问时间服务器。
https://unix.stackexchange.com/questions/283164
复制相似问题