2012-03-06 124 views
4

好吧,我似乎无法弄清楚发生了什么,所以我决定问你们。Java时间戳和PHP时间戳给出2个不同时间

date_default_timezone_set("UTC"); 
time() 

这将例如给我1331065202

然后,我有在Java中的代码,让我UTC时间戳:

long timestamp = System.currentTimeMillis()/1000; 
在PHP中,我使用这个代码抓住UTC时间戳

这将举例给我1331093502

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

回答

4

鉴于两个值是疯狂不同(甚至不是一个整数小时),我会说其中一台机器上的时钟是错误的。 (我假设你拿了两个时间戳在几乎相同的时间。)

这些时间戳:

  • PHP:星期二3月6 20点20分02秒格林尼治标准时间2012
  • 的Java:星期三三月07四点十一分42秒格林尼治标准时间2012

鉴于它的 3月27日格林尼治标准时间,它看起来像Java的机器上的时钟被简单地设置不正确。

如果这是一个真正的VPS,你可以完全控制,你应该看看使用NTP或类似的东西来保持服务器的时钟正确。

+0

那么,问题就在于这是一款游戏插件。这个插件可以用在世界各地的许多不同的服务器上。只有让Java进入我们的服务器并抢占时间,才有可能提高资源利用效率?每台服务器每分钟可能会为数千台服务器执行一次。 – 2012-03-06 20:48:15

+0

@MarcusKrueger:如果你控制所有的服务器,你可以确保它们都运行NTP同步,不是吗?当然,仍然可能存在差异,但它们不应该很大。 – 2012-03-06 20:49:11

+0

我编辑了我的评论以包含更多数据。而且我无法控制所有的服务器。 – 2012-03-06 20:49:50

0

这些scrips都在2个不同的服务器

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

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

2

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

sudo apt-get install ntp 

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

/etc/init.d/ntp restart 

希望有所帮助。