【问题标题】:Java Timestamp and PHP Timestamp giving 2 different timesJava Timestamp 和 PHP Timestamp 给出 2 个不同的时间
【发布时间】:2012-03-24 09:10:06
【问题描述】:

好吧,我似乎无法弄清楚发生了什么,所以我决定问问你们。在 PHP 中,我使用以下代码获取 UTC 时间戳:

date_default_timezone_set("UTC");
time()

例如,这将给我 1331065202

然后我在 Java 中使用这段代码来获取 UTC 时间戳:

long timestamp = System.currentTimeMillis() / 1000;

例如,这将给我 1331093502

为什么 2 次如此不同?他们不应该都在UTC时区还是我做错了什么?我托管在 VPS 上,这些脚本位于 2 个不同的服务器上,所以它可能是服务器端的东西,如果是,我该怎么办?

【问题讨论】:

    标签: java php timezone timestamp


    【解决方案1】:

    鉴于这两个值非常不同(甚至不是整数小时数),我会说其中一台机器上的时钟是错误的。 (我假设您几乎同时获取了两个时间戳。)

    这些时间戳是:

    • PHP:2012 年 3 月 6 日星期二 20:20:02 GMT
    • Java:2012 年 3 月 7 日星期三 04:11:42 GMT

    鉴于格林威治标准时间不是 3 月 27 日,看起来 Java 机器上的时钟设置不正确。

    如果它是您可以完全控制的真正 VPS,您应该考虑使用 NTP 或类似的东西来保持服务器的时钟正确。

    【讨论】:

    • 嗯,问题在于这是一个游戏插件。这个插件可以在世界各地的许多不同的服务器上使用。让 Java 访问我们的服务器并抓紧时间是否可行且资源效率高?对于可能有数千台服务器的每台服务器,这将每分钟执行一次。
    • @MarcusKrueger:如果您控制所有服务器,您可以确保它们都在运行 NTP 同步,不是吗?当然,仍然可能存在差异,但它们不应该很大。
    • 我编辑了我的评论以包含更多数据。而且我无法控制所有服务器。
    • @MarcusKrueger:如果您不控制服务器,那么您当然不能假设它们的时间是同步的。不过,您可以从 Java 代码有效地充当 NTP 客户端,是的 - 或者咨询您控制的一组服务器,这些服务器本身将充当时间服务器(无论是通过 NTP 还是其他方式)。目前还不是很清楚上下文是什么,恐怕......
    • 好吧,我将查询我的受控网络服务器以获取当前时间戳。我非常感谢详细且非常有帮助的回复!
    【解决方案2】:

    这些脚本位于 2 个不同的服务器上

    有一个线索,就在那里:你的两台服务器设置了不同的时间。

    如果您需要 Java 和 PHP 应用程序同步,请考虑让两台服务器都使用 Network Time Protocol

    【讨论】:

      【解决方案3】:

      正如上面的人已经写的那样。使用ntp。 如果您的 VPS 在您的控制之下并且它是 debian / ubuntu。以下 shell 脚本将安装它。

          sudo apt-get install ntp
      

      它会在安装后启动 ntp,但如果你想确保守护进程正在运行

          /etc/init.d/ntp restart
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2023-01-10
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 2016-05-28
        • 2016-04-15
        相关资源
        最近更新 更多