将ticks转换为Unix时间戳

6

我正在获取开始时间634942626000000000和结束时间634942638000000000。如何将其转换为Unix时间戳?我想在PHP中显示格式化的日期/时间。

3个回答

10
C#计时是指从午夜0001-01-01 00:00:00以来的滴答数(每个滴答是1/10000000秒),而UNIX时间戳是指自UNIX纪元(1970-01-01 01:00:00)开始的秒数,所以期望的结果是$seconds = 634942626000000000/10000000 - $number_of_seconds,其中$number_of_seconds0001-00-01 00:00:001970-01-01 01:00:00之间的秒数。因此,现在您需要确定$number_of_seconds等于多少。 更新:这是如何在C#中执行此操作的:如何将Unix时间戳转换为DateTime或相反? 更新2:使用这个简单的脚本http://hastebin.com/lefiyiheju.mel,可以确定$number_of_seconds为62136892800,但我不知道它是否很准确。

Wolfram Alpha 给出的 6.214×10^10 秒是从0001年到1970年之间的秒数,但这对于他正在寻找的计算来说不够准确。 - WhyteWolf
也许可以使用C# + bigint来完成,因为它在任何地方都可以从“0001-01-01 00:00:00”计算时间,但我不懂C#语言。 - Timur
非常感谢您详细的回复,我真的很感激。 - Ricky Watson
我已经计算出 $number_of_seconds = 62135600400。这似乎准确到秒,对于我想要使用它的目的来说已经足够好了。 - mozey
2
Math.floor(numOfTicks/10000 - 62136892800000) // JS 时间戳(毫秒)new Date(Math.floor(numOfTicks/10000 - 62136892800000)) // js 日期 - Alireza Mirian
2
你的UNIX纪元不是差了1小时吗?根据我找到的,Unix时间戳0等于:621355968000000000个滴答。$num_of_secs不应该是621355968000000000/10000000吗? - Sinkeat

1
这应该可以:
$seconds = 634942626000000000 / 1000000000;
echo date("Y-m-d H:i:s", $seconds);

我尝试过了,但返回的是1969年12月31日19:32:49。它必须是当前的日期/时间。我从http://122.155.1.10/program-info/pginfo-20130120.txt获取它。 - Ricky Watson
是的,我已经修复了。但我仍然得到1969年12月31日19:32:49的时间戳。有什么建议吗? - Ricky Watson
Ticks从0001-01-01开始计数,Unix时间戳从1970-01-01开始计数,因此这个答案是错误的。 - user3064538

-1

在Python中,你会做

In [53]: import datetime

In [54]: ticks = 634942626000000000

In [55]: start = datetime.datetime(1, 1, 1)

In [56]: delta = datetime.timedelta(seconds=ticks/10000000)

In [57]: the_actual_date = start + delta

In [58]: the_actual_date.timestamp()
Out[58]: 1358665800.0

In [59]: the_actual_date
Out[59]: datetime.datetime(2013, 1, 20, 7, 10)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接