2012-03-06 125 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 

希望有所幫助。