Подтвердить что ты не робот

Как получить текущее время и время от Locale?

У меня есть эта странная проблема, когда я создаю календарь с локалью, TimeZone просто возвращается к локальному

public void start(Locale locale){
    String s = locale.getDisplayName(); 
    System.err.println(s);
    Calendar c = new GregorianCalendar(locale);
    System.err.println(c.getTimeZone());
}

И это результат:

 español (Argentina)
 sun.util.calendar.ZoneInfo[id="Europe/Bucharest", //etc more useless date here....

Как я могу получить нужное время из определенного языка?

4b9b3361

Ответ 1

Короткий ответ: вы не можете.

Длинный ответ: нет такой вещи, как "правильный часовой пояс для локали". Это только потому, что есть несколько стран, которые имеют более одного часового пояса (например, Соединенные Штаты). Часовой пояс - это другое понятие.

В любом случае, вы хотите решить свою проблему. Я предполагаю, что вы пишете веб-приложение, и вы видите, что часовой пояс возвращается к серверу по умолчанию. Это типичная ситуация. Оба Locale.getDefault() и TimeZone.getDefault() возвращают информацию, связанную с сервером. JVM не имеет возможности узнать "правильный" часовой пояс. Итак, что вы можете с этим сделать?

  • Вы можете добавить информацию о часовом поясе в профиль пользователя (если у вас есть) или создать поле со списком часовых поясов (чтобы пользователь мог переключиться во время выполнения). Затем вы можете назначить соответствующий объект экземпляру DateFormat, и он автоматически преобразует часовой пояс.
  • Вы можете прочитать смещение часового пояса текущего от клиента с помощью функции JavaScript Date Object getTimezoneOffset() и как-то (AJAX) отправить его на сервер. Проблема с этим методом заключается в том, что существует несколько часовых поясов с этим смещением, и выбранный часовой пояс может быть неприемлем для других дат. Конечно, вы можете угадать часовой пояс, опросив данные по дате изменения времени, но это, вероятно, не то, что вы хотите сделать.
  • Вы можете отправить неформатированное время клиенту (например, записанное как формат даты ISO 8601 или как Unix time of the epoch в отношении UTC) и Globalize или Dojo формат даты и времени для вас.

Из этих трех возможных вариантов я всегда выбираю номер 1. Предоставляя информацию о часовом поясе в профиль пользователя, вы точно знаете, какой он/ее предпочтительный часовой пояс, независимо от их текущего веб-браузера и т.д. Пожалуйста, продолжайте что некоторые пользователи могут захотеть использовать ваше приложение во время посещения других стран...