Java Timestamp и PHP Timestamp дают 2 разных времени

Хорошо, я не могу понять, что происходит, поэтому я решил спросить вас, ребята. В PHP я получаю метку времени UTC, используя этот код:

date_default_timezone_set("UTC");
time()

Это, например, даст мне 1331065202

Затем у меня есть этот код на Java, чтобы получить метку времени UTC:

long timestamp = System.currentTimeMillis() / 1000;

Это, например, даст мне 1331093502

Почему 2 раза такие разные? Разве они не должны быть в часовом поясе UTC, или я делаю что-то не так? Я размещен на VPS, и эти скрипы находятся на 2 разных серверах, так что это может быть что-то на стороне сервера, и если да, что я могу сделать?

3 ответа

Решение

Учитывая, что эти два значения сильно отличаются (даже не целое число часов), я бы сказал, что часы на одной из машин неправильные. (Я предполагаю, что вы взяли две временные метки в одно и то же время.)

Эти временные метки:

  • PHP: вторник, 06 марта 20:20:02 GMT 2012
  • Ява: ср. 07 марта 04:11:42 GMT 2012

Учитывая, что по Гринвичу не 27 марта, похоже, что часы на Java-машине просто установлены неправильно.

Если это настоящий VPS, которым вы обладаете полным контролем, вы должны рассмотреть возможность использования NTP или чего-то подобного, чтобы обеспечить правильную работу часов серверов.

Как уже сказали выше люди. использовать нтп. Если ваш VPS находится под вашим контролем, и это Debian / Ubuntu. Следующий сценарий оболочки установит его.

    sudo apt-get install ntp

После установки он запустит ntp, но если вы хотите быть уверены, что демон работает

    /etc/init.d/ntp restart

Надеюсь, это поможет.

эти скрипы находятся на 2 разных серверах

Вот подсказка: на двух ваших серверах установлено разное время.

Если вам нужно синхронизировать приложения Java и PHP, рассмотрите возможность использования обоих серверов сетевого протокола времени.

Другие вопросы по тегам