比较 PHP 时间戳(整数)和 java 时间戳(长)

Comparing a PHP timestamp(int) to a java timestamp(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: ---

您需要将 unix 时间戳 (php) 乘以 1000,因为 java 需要毫秒。

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

不幸的是,唯一的解决方案是您必须在 JAVA 多头上损失一些准确性。这是因为 PHP 无法生成长整数(32 位标量变量)

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

确保在你从 long 中取出 length 之后转换 int 否则你会不准确。