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, рассмотрите возможность использования обоих серверов сетевого протокола времени.