一天总是有86,400个纪元秒吗?

在回顾过去的回答时,我注意到我提出了如下代码:

import time

def dates_between(start, end):
  # muck around between the 9k+ time representation systems in Python
  # now start and end are seconds since epoch

  # return [start, start + 86400, start + 86400*2, ...]
  return range(start, end + 1, 86400)

当重读这段代码时,我忍不住感到脊柱上托尼小马的可怕接触,轻轻地在我的耳朵和其他可怕的,可怕的事情上嘀嘀咕咕叫。

什么时候“一天是86,400秒长”假设中断,对于'秒'的时代定义,如果有的话? (我假设Python的time.mktime等函数已经返回了DST调整后的值,所以上面的代码片段也应该用于DST切换日期......我希望?)


每当进行日历计算时,使用平台提供的任何API(如Python的日历模块或成熟的高质量库)几乎总是比自己编写“更简单”的代码更好。 日历API是丑陋而复杂的,但这是因为真实世界的日历有很多奇怪的行为。

例如,如果现在是“10:00:00 AM”,那么到“明天上午10:00:00”的秒数可能是几个不同的事情,具体取决于您使用的是什么时区, DST是否在晚上开始或结束,等等。

任何时候常量86400出现在你的代码中,你很可能会做一些不太正确的事情。

而当你需要确定一周,一个月,一年,四分之一秒等等时,事情会变得更加复杂。 学习使用这些日历库。


根据维基百科,

UTC时间几乎总是86 400 s,但由于“闰秒”偶尔会有86 401 s,可能会达到86 399 s(尽管后一种方式从2010年12月起一直没有使用过)。 这使得这些日子与地球的旋转(或世界时)保持同步。

如果那是曾经被使用过的,我预计双闰秒实际上可能使得长达86402s的时间更长。

再次编辑:第二个猜测是由于混淆python文档。 time.mktime始终返回UTC时期秒数。 做完了。 :)


一天中的秒数取决于您使用的时间系统,例如,在POSIX中,一天的定义正好是86400秒:

以大纪元以来的秒数表示,每一天都应该计入86400秒。

在UTC中,可能会出现闰秒,即一天可以达到86401 SI秒(理论上可达86399 SI秒)。 截至2015年6月30日,已发生26次。

如果我们通过太阳的明显运动来测量日子,那么(太阳)日的长度在整个年份中会相差约16分钟。

反过来,UT1也是基于地球的旋转(平均太阳时间)。 一个明显的太阳日可以比平均太阳日短20秒或30秒。 通过偶尔插入闰秒,UTC保持在UT1的0.9秒内。

如果你用当地时钟来定义一天,那么由于奇怪的政治时区变化,它可能非常混乱。 假设由于DST每天只能改变一个小时是不正确的。

链接地址: http://www.djcxy.com/p/3047.html

上一篇: Is a day always 86,400 epoch seconds long?

下一篇: How can I run a Windows GUI application on as a service?