2015-05-08 126 views
3

我碰到了一堵磚牆。比較PHP時間戳(int)和java時間戳(long)

我正在從服務器下載加密的關卡數據(用我創建的關卡創建者製作的)。

級別數據使用長時間使用Java存儲數據的最新更新版本。

現在爲了更新關卡,我下載了一個可用關卡的列表,以及他們上次在文件中使用php進行修改的時間。

很多人會說我必須把時間存儲在其他地方,比如json。這不是一個選項。

我得到如下結果:

Fri May 08 23:05:24 CEST 2015 | timeStampJava: 1431119124273 
Sat Jan 17 14:31:58 CET 1970 | fileTimeStampPHP(filemtime): 1431118989 
OLLY:LOG: --- 
Fri May 08 23:05:28 CEST 2015 | timeStampJava: 1431119128871 
Sat Jan 17 14:31:58 CET 1970 | fileTimeStampPHP(filemtime): 1431118989 
OLLY:LOG: --- 
Fri May 08 23:05:32 CEST 2015 | timeStampJava: 1431119132288 
Sat Jan 17 14:31:58 CET 1970 | fileTimeStampPHP(filemtime): 1431118989 
OLLY:LOG: --- 
Fri May 08 23:05:35 CEST 2015 | timeStampJava: 1431119135289 
Sat Jan 17 14:31:58 CET 1970 | fileTimeStampPHP(filemtime): 1431118989 
OLLY:LOG: --- 
Fri May 08 23:05:38 CEST 2015 | timeStampJava: 1431119138807 
Sat Jan 17 14:31:58 CET 1970 | fileTimeStampPHP(filemtime): 1431118989 

我想這兩個使用比較:

if(serverLevelInfo.last_updated > localLevelStorage.getLastUpdated()) 

問題是,如果我垂頭喪氣即

phpTimeStamp > (int)javaTimeStamp 

它產生完全結果不準確。

現在做什麼?

編輯1

嘗試建議:

//TODO Problem PHP int timestamp to java long timestamp. 
          PolyUtils.log((long)(serverLevelInfo.last_updated * 1000)); 
          PolyUtils.log(localLevelStorage.getLastUpdated()); 
          PolyUtils.log("---"); 

結果(錯誤)

OLLY:LOG: 894879432 
OLLY:LOG: 1431119124273 
OLLY:LOG: --- 
OLLY:LOG: 894879432 
OLLY:LOG: 1431119128871 
OLLY:LOG: --- 
OLLY:LOG: 896347432 
OLLY:LOG: 1431119132288 
OLLY:LOG: --- 
OLLY:LOG: 894879432 
OLLY:LOG: 1431119135289 
OLLY:LOG: --- 
OLLY:LOG: 894879432 
OLLY:LOG: 1431119138807 
OLLY:LOG: --- 
+0

您的JS時間戳以毫秒爲單位,PHP時間戳以秒爲單位。而你的毫秒值比PHP中32位有符號整數所表示的最大時間要大得多,因此你的1970年的日期。所以基本上你需要'$ php_timestamp = $ js_timestamp/1000;' –

+0

這是JAVA不是Javascript :-) –

+0

無論哪種方式,這是毫秒。 –

回答

1

不幸的是,唯一的解決方案是,你必須在JAVA中失去一些準確性。這是因爲PHP不能生產長材(32位標瓦爾)

if(serverLevelInfo.last_updated > (int)(localLevelStorage.getLastUpdated()/1000)) 

確保您投INT後,您已經採取過的長度長,否則你會不準確。

0

您需要通過1000乘以UNIX時間戳(PHP),因爲Java預計毫秒。

java.util.Date time=new java.util.Date((long)timeStamp*1000); 
+0

你能看到我的更新嗎? –