谁能告诉我这个 635151121709530000 是什么时间格式以及如何转换,结果类似于 2013-9-18 14:42:50
谢谢
此处信息不足,无法将您的电话号码转换为时间。 至少有两种常用的方式来表示一个时间点:
第一个(也是最常见的)是数字表示时间戳表示的时间和某个“纪元”日期之间的时间单位计数。为了将其转换为日期,您需要两条信息:刻度(时间戳 N 和 N+1 之间经过的时间量)和参考时间戳(通常是纪元日期,即数字 0 代表的日期/时间)。
如果没有该信息,您将需要至少两个时间戳,以及每个时间戳代表的日期/时间。然后,您可以找到它们之间的差异,除以秒数,这将为您提供比例。然后,您可以推断找到纪元日期。
第二种可能性是数字是一个位域,其中日期的每一部分都由整数中的一组位表示。
如果是这样的话,那你就有点搞砸了。可能会进行各种数学运算以将日期部分放入位字段中。您将不得不询问负责系统的人,或者如果是您现在,请检查生成时间戳的代码。
编辑:如果我们采用您在评论中提供的数字:
635155956336800000 2013-9-24 05:00:33
635155957368670000 2013-9-24 05:02:16
635155968617830000 2013-9-24 05:21:10
635155968728200000 2013-9-24 05:21:12
635155971811300000 2013-9-24 05:26:21
635155972798800000 2013-9-24 05:27:59
635155978347870000 2013-9-24 05:37:14
让我们看看这些数字是否有意义。
取第一次和最后一次,找出它们各自时间戳之间的差异。
635155978347870000 - 635155956336800000 = 22011070000 滴答
除以两次相隔的秒数((37*60+14) - 33 == 2201 秒)
22011070000 滴答 / 2201 秒 = 10000486.142662 滴答/秒
四舍五入到一个不错的偶数,因为除非您混淆,否则时间戳基于有用的间隔。因此,在您的情况下,规模似乎是每秒 1000 万次滴答声,或每滴答声 100ns。
使用其他时间戳进行验证(在本例中为 5:27:59 和 5:00:33):
635155972798800000 - 635155956336800000 == 16462000000 滴答
16462000000 滴答 / 10000000 滴答/秒 = 1646.2 秒
(27*60+59) - 33 == 1646 秒
所以 100ns 看起来是对的。不过,为了确定,我们需要进一步分开时间戳。只是为了确保这确实是一个计数,而不是表示年份和当前第二个年份的两个 31 位数字。
假设这是一个计数,如果我们取第一个时间戳并除以 1000 万:
635155956336800000 滴答 / 10000000 滴答/秒 = 63515595633.6800000 秒
那是自纪元以来的 635 亿秒。作为参考,32 位签名时间戳(数量超过 20 亿)将在 2038 年用完,即 Unix 时代(1970 年)的 68 年。这个数字约为 29.58 倍,即 29.58 * 68 ~= 2011 年。
那将把这个时代放在公元一世纪初。1 CE 是一个足够重要的日期,它作为纪元日期是有意义的。不过,我不想做数学来确认这一点。
对应于 cHao 每秒 10000000 次滴答,但使用我最初建议的 01/01/0001 的基准日期:
$values = array(
array(635155956336800000, "2013-9-24 05:00:33"),
array(635155957368670000, "2013-9-24 05:02:16"),
array(635155968617830000, "2013-9-24 05:21:10"),
array(635155968728200000, "2013-9-24 05:21:12"),
array(635155971811300000, "2013-9-24 05:26:21"),
array(635155972798800000, "2013-9-24 05:27:59"),
array(635155978347870000, "2013-9-24 05:37:14"),
);
function convert($date) {
static $monthArray = array(
31,29,31,30,31,30,31,31,30,31,30,31
);
$date = $date / 10000000 / 24 / 60 / 60;
$y = floor($date / 365.2425);
$YYYY = $y + 1;
$z = 365 * $y + floor($y/4) - floor($y/100) + floor($y/400);
$d = $date - $z;
$month = 1;
while (true) {
$d -= $monthArray[$month - 1];
if ($d < 0) break;
$month++;
$dd = $d;
}
$hh = ($dd - floor($dd)) * 24;
$hours = floor($hh);
$mm = ($hh - floor($hh)) * 60;
$minutes = floor($mm);
$ss = ($mm - floor($mm)) * 60;
$seconds = floor($ss);
return sprintf('%04d-%02d-%02d %02d:%02d:%02d', $YYYY, $month, floor($dd), $hours, $minutes, $seconds);
}
foreach($values as $value) {
echo convert($value[0]), PHP_EOL;
}
给出:
2013-09-22 05:00:33
2013-09-22 05:02:16
2013-09-22 05:21:01
2013-09-22 05:21:12
2013-09-22 05:26:21
2013-09-22 05:27:59
2013-09-22 05:37:14
我不确定 2 天的差异来自哪里,但输出可能会任意添加 2 天,除非您使用接近 0 时间戳标记的极具历史意义的日期,否则它可能已经足够好了使用的功能