Так что я портирую код с PHP на Java. Часть кода имеет алгоритм хэширования, зависящий от времени, когда текущая временная метка Unix действует как семя. Я сталкиваюсь с проблемой, когда мой портированный код дает мне разные ответы на любом языке. Я подозреваю, что это может быть небольшая разница в реализации или что-то в этом роде.Почему эпоха Epoch отличается от Java и PHP?
Мне интересно, является ли проблема чем-то довольно неясным, например this. Тем не менее, любая помощь была бы весьма признательна.
Вот мой код на Java.
private static int generateB() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
Date start;
Date now;
try {
start = sdf.parse("01/01/1970");
now = new Date();
} catch (ParseException e) {
return 402890;
}
long diff = now.getTime() - start.getTime();
long hours = diff/(60 * 60 * 1000) % 24;
long days = diff/(24 * 60 * 60 * 1000);
return (int) (hours + days * 24);
}
и вот PHP код:
/**
* Generate "b" parameter
* The number of hours elapsed, since 1st of January 1970
*
* @return int
*/
private function generateB()
{
$start = new \DateTime('1970-01-01');
$now = new \DateTime('now');
$diff = $now->diff($start);
return $diff->h + ($diff->days * 24);
}
Тем не менее, они возвращают разные результаты, от 3 ч, чтобы быть точным.
На момент публикации. PHP возвращает 403472, в то время как Java возвращает 403475. Также, если я использую System.currentTimeMillis(), я получаю 403480.
Так что мой вопрос в том, почему есть какая-то разница? Я имею в виду, что вычитание 3 может решить мою проблему, но мне просто интересно узнать, почему разница существует вообще. Примечание. Я использую PHP через PHP Sandbox для тестирования.
Ваш часовой пояс? Временные метки Java всегда в UTC, если я помню. –
В коде Java вы явно определяете часовой пояс по внешнему виду вещей (я не знаю много Java), но в php-коде вызов 'DateTime' не получил часовой пояс. Я считаю, что эпоха - это GMT. – RamRaider
Это определенно точное количество часов? Вы проверили количество миллисекунд для подтверждения? Если это так, я предполагаю, что это будет какая-то разница во времени. – DaveyDaveDave