比较 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 否则你会不准确。
我碰壁了。
我正在从服务器下载加密的关卡数据(由我创建的关卡创建者制作)。
关卡数据存储最后更新版本的数据,使用长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 否则你会不准确。