Java Timestamp и PHP Timestamp дают 2 разных времени - PullRequest
4 голосов
/ 07 марта 2012

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

date_default_timezone_set("UTC");
time()

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

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

long timestamp = System.currentTimeMillis() / 1000;

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

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

Ответы [ 3 ]

4 голосов
/ 07 марта 2012

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

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

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

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

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

2 голосов
/ 07 марта 2012

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

    sudo apt-get install ntp

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

    /etc/init.d/ntp restart

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

0 голосов
/ 07 марта 2012

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

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

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

...