Поэтому я портирую код с PHP на Java. Часть кода имеет чувствительный ко времени алгоритм хеширования, где текущая метка времени Unix действует как начальное число. Я сталкиваюсь с проблемой, когда мой перенесенный код дает мне разные ответы на любом языке. Я подозреваю, что это может быть небольшая разница в реализации или что-то.
Я задаюсь вопросом, является ли проблема чем-то довольно неясным, таким как этот. Тем не менее, любая помощь будет принята с благодарностью.
Вот мой код на 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 для тестирования.
Судя по твоей цитате
На момент написания этого поста. PHP возвращает 403472, а Java возвращает 403475. Также, если я использую System.currentTimeMillis (), я получаю 403480.
все выглядит хорошо — между вашим PHP и Java есть 3 секунды, и в дополнение к этому 5 секунд. Я думаю, это, вероятно, количество времени, которое потребовалось вам, чтобы переключить процесс и запустить тесты?
php > echo date('Y-m-d H:i:s', 403472);
1970-01-05 17:04:32
php > echo date('Y-m-d H:i:s', 403475);
1970-01-05 17:04:35
php > echo date('Y-m-d H:i:s', 403480);
1970-01-05 17:04:40
Других решений пока нет …