2013-01-14 127 views
4

我正在尝试与第三方服务进行整合,该服务想知道有多少“UTC时间在刻度中(自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时代之间经过了多少秒,我可以使用bcmath或gmp将time(作为常量)添加到time()(再次假设ticks是秒),但我不知道这个数字会是多少。

任何想法?

回答

3

我期望在.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之间,您需要多秒。在此SO post 00至01-01-1970:

我找到的值:

621,355,968,000,000,000 

为蜱从01-01-0001T00:00。我不知道它是如何计算的。我假设.NET框架将输出它。我会建议验证这个值,并像你提到的那样在PHP中声明它为一个常量。

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

-2

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

+1

这不是问什么问题 –

+0

@therefromhere这是问题的问题。 (顺便说一句,这个常数不算闰年。) – Licson

+0

我认为问题的主要部分是什么是蜱。 –

1

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

如果他们希望你从第一年开始计数,那就会引发各种其他麻烦的问题,因为直到1582年才引入公历(我们现在使用的那个)。 (UTC的概念直到1961年才被标准化。)服务提供商可能考虑或不考虑日历变更。

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

相关问题