【问题标题】:How many seconds elapsed since 01/01/1970, leap-seconds included?自 1970 年 1 月 1 日以来经过了多少秒,包括闰秒?
【发布时间】:2021-01-03 16:04:36
【问题描述】:

Unix 时间戳由:

int(time.time())

给出自 1970 年 1 月 1 日以来经过的秒数,没有闰秒。

只是出于好奇,如何获取自此日期以来经过的秒数 true,包括闰秒? (即时间轴上这两个事件之间的距离)

注意事项:

  • 示例:时间戳范围 867715190.000 .. 867715202.000 表示 13 秒的“实际持续时间”(用计时器测量),因为 1997 年的这一天有一个闰秒,而 Unix 时间戳只有 增加了 +12。

  • 示例 2:从 1970 年 1 月 1 日到 2020 年 1 月 1 日(这 50 年间隔中有 12 个闰年)之间经过的实际时间是 (365*50+12)*24*3600 + number_leap_seconds不是 @ 987654326@。但是我们看到datetime.datetime.utcfromtimestamp((365*50+12)*24*3600)2020-01-01 00:00:00,所以显然没有考虑闰秒。

  • 链接到What does python return on the leap secondUnix time and leap seconds

【问题讨论】:

  • 根据我对您显示的两个链接的阅读,您确实得到了真实的秒数。只是从这个到日期的转换搞砸了(因为其中一些秒被指定为闰秒)。
  • 请参阅编辑问题@AryaMcCarthy 中的“示例 2”,这表明没有考虑闰秒。 Unix 时间戳是时间的表示(在闰秒的情况下不唯一!),但不是经过时间的实际度量。

标签: python datetime time leap-second


【解决方案1】:

自 1972-01-01 以来任意两个 UTC 时间戳之间的 SI 秒数需要访问已引入 UTC 的闰秒列表。此列表作为 IANA tzdata 分发的一部分提供,也可以从其他来源获得。

需要小心,因为在 1970-01-01 和 1972-01-01 之间的国际单位制秒数是 2x365x24x60x60 + 1.999918 国际单位制秒,因为在 1970 年,官方时间不是由铯原子确定的,而是通过实际测量来确定的地球自转,所以官方秒是平均太阳秒而不是国际单位秒。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,您可以使用“正确”的时间来解决它:

    import os; import time; import datetime;
    tai_epoch=datetime.datetime(1970, 1, 1, 0, 0, 10)
    timezone=time.tzname[0];os.environ['TZ']='right/UTC';time.tzset()
    now=datetime.datetime.utcnow()
    leap_seconds=int(now.timestamp())-int((now-tai_epoch).total_seconds())
    right_time=int(now.timestamp())+leap_seconds
    os.environ['TZ']=timezone;time.tzset()
    

    您可以将其与常规 UTC 时间进行比较,如下所示:

    utc_time=int(time.time())
    print(right_time-utc_time)
    

    目前,它会给你37

    【讨论】:

      猜你喜欢
      • 2012-01-19
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2012-02-19
      • 2012-10-07
      • 2012-07-06
      • 1970-01-01
      • 2019-12-10
      相关资源
      最近更新 更多