4

我正在尝试与第三方服务集成,该服务想知道有多少“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() (再次假设滴答声是秒),但我不知道那个数字是多少。

有任何想法吗?

4

3 回答 3

3

我希望使用 .NET 编写的服务,因为 .NET 框架知道 DateTime.Ticks。文档中提到了一个勾号:

一个滴答表示一百纳秒或百万分之一秒。一毫秒内有 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 帖子中从 01-01-0001T00:00:00 到 01-01-1970 的刻度。我不知道它是如何计算的。我假设 .NET 框架会输出它。如您所述,我建议验证该值并将其声明为 PHP 中的常量。

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

于 2013-01-14T23:42:00.680 回答
1

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

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

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

于 2013-01-14T23:57:21.407 回答
-2

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

于 2013-01-14T23:37:49.880 回答