UTC时间(从01/01/0001 00:00:00开始)


UTC time in ticks (since 01/01/0001 00:00:00)

我正在尝试与第三方服务集成,该服务想知道有多少个"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 epoch之间经过了多少秒,我可以使用bcmath或gmp将该数量(作为常量)添加到time()(再次假设tick是秒),但我不知道这个数字将是什么。

任何想法?

我希望用。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

表示本文中从01-01-0001T00:00:00到01-01-1970的刻度。我不知道这是怎么计算出来的。我假设。net框架将输出它。我建议验证这个值,并将其声明为PHP中的常量。

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

"ticks"没有标准定义。可以表示秒、50分、60分或100分秒、毫秒或任何其他细分。您需要向服务提供商询问详细信息。

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

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

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