2015-05-08 122 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

你能看到我的更新吗? –