Я ударил кирпичную стену.
Я загружаю зашифрованные данные уровня с сервера (созданного создателем уровня, который я создал).
Уровень данных хранит последнюю обновленную версию данных с использованием 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: ---
К сожалению, единственное решение состоит в том, что вам придется потерять некоторую точность на JAVA long. Это потому, что PHP не может производить длинные (32-битные скалярные переменные.)
if(serverLevelInfo.last_updated > (int)(localLevelStorage.getLastUpdated() / 1000))
Удостоверьтесь, что вы применили int после того, как вы сняли длину с long, иначе вы будете неточны.
Вам нужно умножить метку времени Unix (php) на 1000, потому что Java ожидает миллисекунды.
java.util.Date time=new java.util.Date((long)timeStamp*1000);