как бороться с международным временем? - PullRequest
0 голосов
/ 31 января 2011

Я создаю новый веб-сайт. Но хост находится в США. Я не в США. Мне нужно получить время на странице сайта, чтобы сравнить с одной локальной переменной. Но из-за разницы во времени разница в 8 часов - как решить эту проблему?

мой код

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");  
java.util.Date currentTime = new java.util.Date();  
String dateString = formatter.format(currentTime);  `

как пересмотреть этот код?

Ответы [ 4 ]

6 голосов
/ 31 января 2011

java.util.Date не поддерживает часовые пояса. Вместо этого вы должны передать TimeZone в средство форматирования, вызвав formatter.setTimeZone(tz).

joda-time считается лучшим выбором при работе с датами. Обратите внимание, что для форматирования хорошо использовать Date, но это общий совет не полагаться на него, когда дело доходит до i18n. (Обратите внимание на многие устаревшие методы там)

Затем заставьте каждого пользователя установить свой часовой пояс. Идеально предложить / предположить часовой пояс, основанный на его локали браузера. Смотрите здесь

И всегда храните даты в фиксированном часовом поясе - предпочтительно по Гринвичу / UTC.

1 голос
/ 31 января 2011

Для обработки часовых поясов Java включает в себя базу данных часовых поясов Олсона .Найдите город в базе данных, которая находится в том же часовом поясе, что и вы.

Сначала вам нужно получить TimeZone объект для желаемого часового пояса.Затем получите Calendar объект с текущей датой и временем (или датой и временем, которые вы хотите использовать).Вы можете отформатировать это с помощью объекта SimpleDateFormat.

TimeZone local = TimeZone.getTimeZone("Asia/Tokyo");
Calendar now = Calendar.getInstance(local); // gets time in the current timezone
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
formatter.setTimeZone(local)

String dateString = formatter.format(now.getTime());

Хотя, если вы делаете много временных манипуляций, как говорит Божо, переходите на joda-time.Система даты / времени Java сбивает с толку и довольно плохо спроектирована.

0 голосов
/ 31 января 2011

Я думаю, что вам нужно использовать Календарь (обычно они более полезны, чем просто объекты Date).Если вы создаете календарь, инициализированный с помощью вашей локали и часового пояса, вы можете сделать calendar.setDate(), используя дату, которую вы создали.Если вы создадите другой объект Календаря с полями, которые были введены, вы можете затем сравнить два объекта Календаря.

0 голосов
/ 31 января 2011

В таких случаях я всегда меняю часовой пояс в Linux :

mv /etc/localtime  /etc/localtime-backup
ln -sf /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime 

Это также может быть полезно, например, для чтения файлов журнала (я всегда вижу свое местное время, а не вычисляю его каждый раз, когда мне нужно копаться в них)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...