【问题标题】:Difference between SimpleDateFormat and strtotime?SimpleDateFormat 和 strtotime 之间的区别?
【发布时间】:2013-08-30 14:03:55
【问题描述】:

这在 PHP 中有什么区别

echo strtotime("2013-08-30");

Java 中的这个

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2013-08-30");
System.out.println(date.getTime());

这不应该最后给我同样的数字吗?

编辑

例如在这种情况下,PHP 给出: 1377838800

Java 给出:1377838800000

就像 PHP 在途中的某个地方丢失了几个零

【问题讨论】:

  • 每种方法的文档告诉你什么?
  • 你应该使用DateTime::createFromFormat而不是strtotime()。像 SimpleDateFormat 一样,它接受自定义格式 + 时区。

标签: java php date-format


【解决方案1】:

PHP strtotime()

  • 将任何英文文本日期时间描述解析为 Unix 时间戳

Unix 时间戳:

  • 自 1970 年 1 月 1 日 00:00:00 UTC 以来的 秒数

这个

echo strtotime("2013-08-30");

将返回1377835200


Java Date.getTime()

  • 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的 毫秒 数。

这个

System.out.println(date.getTime());

将返回1377831600000

这意味着你应该执行

System.out.println(date.getTime() / 1000);

此外,如果出现差异,请检查您的时区。

【讨论】:

  • 这解释了丢失零的问题
  • @beenjaminnn 在此过程中没有丢失零,它们只是格式不同。就像 10000000 => 989680 ... DAMN,我所有的零都去哪儿了?无处!第一个是十进制,第二个是十六进制。 1000 = 1k。同样的故事。
【解决方案2】:

没有。如文档所述,strtotime 返回自 Unix 纪元以来的 Date.getTime 返回自 Unix 纪元以来的 毫秒

此外,您可能会注意到 Java 和 PHP 使用的默认时区存在差异。 (如果您想使用特定的时区,您可以设置SimpleDateFormat 的时区。)

【讨论】:

    【解决方案3】:

    我不熟悉 Java,但 PHP 中的 strtotime() 函数非常擅长理解以几乎任何有意义的格式编写的日期并返回一个日期对象。我会假设 Java 对您可以输入哪些输入以获得所需的结果要严格得多。

    来自 strtotime 上的 PHP 文档 (http://php.net/manual/en/function.strtotime.php):

    <?php
    echo strtotime("now"), "\n";
    echo strtotime("10 September 2000"), "\n";
    echo strtotime("+1 day"), "\n";
    echo strtotime("+1 week"), "\n";
    echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
    echo strtotime("next Thursday"), "\n";
    echo strtotime("last Monday"), "\n";
    ?>
    

    所有这些都将返回一个有效的日期。

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2020-05-10
      • 2014-09-20
      • 2010-10-28
      • 2015-10-04
      • 2012-08-12
      相关资源
      最近更新 更多