【问题标题】:UTC time in ticks (since 01/01/0001 00:00:00)UTC 时间刻度(自 01/01/0001 00:00:00 起)
【发布时间】:2012-12-29 00:29:47
【问题描述】:

我正在尝试与第三方服务集成,该服务想知道有多少“UTC 时间(自 01/01/0001 00:00:00 起)”已经过去了。

什么是勾号?

假设它是一秒钟(我不知道它是)......自 01/01/0001 00:00:00 以来我应该怎么做?这比 32 位整数大。不确定它是否大于 64 位整数,但 PHP 的 date() 函数返回 32 位整数 - 而不是 64 位整数。

如果我知道从 01/01/0001 00:00:00 到 UNIX 纪元之间经过了多少秒,我可以使用 bcmath 或 gmp 将该数量(作为常数)添加到 time() (再次假设滴答声是秒) 但我不知道那个数字是多少。

有什么想法吗?

【问题讨论】:

    标签: php time epoch


    【解决方案1】:

    我希望使用 .NET 编写的服务,因为 .NET 框架知道 DateTime.Ticks。 documentation 说的是滴答声:

    单个滴答表示一百纳秒或百万分之一秒。一毫秒内有 10,000 个滴答声。

    此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来经过的 100 纳秒间隔数,它表示 DateTime.MinValue。它不包括可归因于闰秒的滴答数。

    因此,从 01/01/0001 00:00:00 到 10.000.000,您将需要几秒钟。

    我找到了价值:

    621,355,968,000,000,000
    

    对于此SO post 中从 01-01-0001T00:00:00 到 01-01-1970 的刻度。我不知道它是如何计算的。我假设 .NET 框架会输出它。如您所述,我建议验证该值并将其声明为 PHP 中的常量。

    PHP 的 int 类型是有符号整数。它的大小取决于您使用的系统。如果它是 64 位系统,则值范围应该足够大。如果不是,您可以使用GMP extensionBC Math 扩展来处理大量数字。

    【讨论】:

      【解决方案2】:

      “滴答声”没有标准定义。可能表示秒、50 秒、60 秒或 100 秒、毫秒或任何数量的其他细分。您需要向服务提供商询问详情。

      如果他们想让你从第 1 年开始计算,那会引发各种其他麻烦的问题,因为公历(我们现在使用的那个)直到 1582 年才引入! (直到 1961 年,UTC 的概念也没有标准化。)服务提供商可能会也可能不会考虑日历的变化。

      检查所有这些的一种简单方法是询问他们现在(或其他最近的参考日期)对应的值是什么。

      【讨论】:

        【解决方案3】:

        Unix 时间是自 1970 年 1 月 1 日以来经过的秒数。当然你可以使用特殊的库,例如 bcmath 来添加时间戳。 unix 时间比 UTC 时间晚 1970 年,因此常数为 1970*365*24*60*60 秒。

        【讨论】:

        • 问题不是这样
        • @therefromhere 这就是问题所在。 (顺便说一下,这个常数不算闰年。)
        • 我认为问题的主要部分是什么是勾号。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 2020-01-19
        • 1970-01-01
        • 2019-12-01
        相关资源
        最近更新 更多