【问题标题】:Time Format -> 635151121709530000? [closed]时间格式 -> 635151121709530000? [关闭]
【发布时间】:2013-10-02 17:44:22
【问题描述】:

谁能告诉我这个 635151121709530000 是什么时间格式以及如何转换,结果类似于 2013-9-18 14:42:50

谢谢

【问题讨论】:

  • 可能是以毫秒为单位的朱利安日期?但是为什么不问问提供信息的人
  • 不能,做这个项目的人死了,当然也没有文档。
  • 也许mathforum.org/library/drmath/view/52585.html 可能会有所帮助。自 0001 年 1 月 1 日以来大约有 63,525,448,800 秒,因此从那时起可能是微秒
  • @Armando:如果您有该时间格式的 second 示例以及它应该是什么(或者至少应该是什么),那么真正有帮助的是什么.你有空吗?
  • 一些其他记录:6351550105:00:33 6351559573686/33 635155957368/33 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

标签: php datetime time timestamp


【解决方案1】:

这里没有足够的信息将您的数字转换为时间。 至少有两种常用的方式来表示时间点:

  • 第一个(也是最常见的)数字表示时间戳表示的时间和某个“纪元”日期之间的时间单位计数。为了将其转换为日期,您需要两条信息:刻度(时间戳 N 和 N+1 之间经过的时间量)和参考时间戳(通常是纪元日期,即数字 0 代表的日期/时间)。

    如果没有该信息,您至少需要 两个 时间戳,以及每个时间戳代表的日期/时间。然后,您可以找到它们之间的差异,除以秒数,这将为您提供比例。然后,您可以推断以找到纪元日期。

  • 第二种可能是数字是位域,其中日期的每一部分都由整数中的某一组位来表示。

    如果是这样,那你就有点搞砸了;可能会进行各种数学运算以将日期部分放入位字段中。您必须询问负责系统的人员,或者如果是您现在,请检查生成时间戳的代码。

编辑:如果我们采用您在 cmets 中提供的数字:

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 是一个足够重要的日期,它作为纪元日期是有意义的。不过,我不想做数学来确认这一点。

【讨论】:

  • 其他一些记录从表:635155000 2013-9201/3351559573686/33 05:0000 2016/15:02:16 6351559686178659686178/02:16 635155968617830000 2013-105: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>
  • @Armando:对于这些日期,您绝对可以使用选项 1(第一个和最后一个之间的差异是秒 * 100,000,000)。由于某种原因,您的时代似乎是 1812-06-25T08:56:02+00:00...
【解决方案2】:

对应于 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 时间戳标记,否则它可能是一个足够好的功能使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2015-08-29
    • 2012-08-13
    • 2014-12-18
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多