Сравнение временной метки 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: ---

3

Решение

К сожалению, единственное решение состоит в том, что вам придется потерять некоторую точность на JAVA long. Это потому, что PHP не может производить длинные (32-битные скалярные переменные.)

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

Удостоверьтесь, что вы применили int после того, как вы сняли длину с long, иначе вы будете неточны.

1

Другие решения

Вам нужно умножить метку времени Unix (php) на 1000, потому что Java ожидает миллисекунды.

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

По вопросам рекламы [email protected]