一天总是86,400秒?

bad*_*adp 38 python timezone epoch

在回顾我的过去的答案,我发现我倒是建议代码,如:

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)
Run Code Online (Sandbox Code Playgroud)

当重读这段代码时,我忍不住感受到托尼小马在我脊椎上的可怕触摸,轻轻地向我的耳朵和其他如此可怕的,可怕的东西嘀咕"闰秒".

什么时候"一天是86,400秒长"假设中断,对于'第二'的时代定义,如果有的话?(我假设像Python这样的函数time.mktime已经返回DST调整后的值,所以上面的代码片段也适用于DST切换天......我希望?)

Kri*_*son 21

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

例如,如果它现在是"10:00:00 AM",那么"明天上午10:00:00"的秒数可能是几个不同的东西,具体取决于您使用的时区, DST是否在今晚开始或结束,等等.

每当常量86400出现在您的代码中时,您很可能会做一些不太正确的事情.

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


Dav*_*ave 11

根据维基百科,

UTC时间几乎总是86 400 s长,但由于"闰秒"偶尔会有86 401 s长,可能是86 399 s长(虽然后者选项从未使用过2010年12月); 这使得日子与地球的旋转(或世界时)保持同步.

我希望双闰秒实际上可以让86402s这一天长,如果这是永远使用的话.

编辑再次:由于令人困惑的python文档,第二次猜测自己. time.mktime始终返回UTC纪元秒.完成了.:)

  • @badp,大纪元时间不计算闰秒,因此每次闰秒时它都会超过"实际"时间.因此,如果您要从"真实"天转换为纪元日,那么您的纪元日并不总是相同的秒数. (2认同)
  • 不必等待下一个闰秒.如果您的时区"支持"夏令时,您每年有两天没有24小时 (2认同)

jfs*_*jfs 9

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

如自大纪元以来的秒数所示,每天应该恰好以86400秒计算.

在UTC中,可能存在闰秒,即,一天可以是86401 SI秒(理论上是86399 SI秒).截至2015年6月30日,已发生过26次.

如果我们通过太阳的明显运动测量天数,那么(太阳)日的长度在一年中与平均值相差约16分钟.

反过来,它与UT1不同,它也基于地球的旋转(平均太阳时).明显的太阳日比平均太阳日短20秒或长30秒.通过引入偶尔的插入闰秒,UTC保持在UT1的0.9秒内.

如果你按当地时钟定义一天,那么由于奇怪的政治时区变化,它可能会非常混乱.假设由于夏令时,一天可能只改变一小时是不正确的.


Luk*_*der 6

在所有"支持" 夏令时的时区,您将获得一年两天没有24小时的时间.他们分别有25小时或23小时.甚至不想考虑硬编码那些日期.它们每年和时区之间都会发生变化.

哦,这里列出了你没有想到的其他34个原因,以及为什么你不应该做你正在做的事情.