2016-01-11 3 views
0

Так что я портирую код с 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 для тестирования.

+1

Ваш часовой пояс? Временные метки Java всегда в UTC, если я помню. –

+0

В коде Java вы явно определяете часовой пояс по внешнему виду вещей (я не знаю много Java), но в php-коде вызов 'DateTime' не получил часовой пояс. Я считаю, что эпоха - это GMT. – RamRaider

+0

Это определенно точное количество часов? Вы проверили количество миллисекунд для подтверждения? Если это так, я предполагаю, что это будет какая-то разница во времени. – DaveyDaveDave

ответ

0

Судя по вашей цитате

Во время этого поста. PHP возвращает 403472 в то время как Java возвращает 403475. Кроме того, если я использую System.currentTimeMillis() Я получаю 403480.

, что все выглядит хорошо - есть 3 секунды между вашим PHP и Java, и 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 
+2

Посмотрите на код еще раз. ОП пытается вычислить часы с эпохи, поэтому это не три секунды; это три *** часа ***. – dcsohl

 Смежные вопросы

  • Нет связанных вопросов^_^