Как узнать текущее время и часовой пояс из локали?

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

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

И это вывод:

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

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

 Alexandru Chirila13 мая 2012 г., 12:26
так что нет способа извлечь часовой пояс из локали ... это довольно глупо
 Paweł Dyda13 мая 2012 г., 12:54
@Rex: это не глупо. Это имеет большой смысл на самом деле. И, честно говоря, вам не нужно этого делать - смотрите мой ответ.
 S.R.I13 мая 2012 г., 12:22
 Javaguru13 мая 2012 г., 12:21
Locale и TimeZone не обязательно связаны 1: 1. Подумайте о локали en_US. Для США существуют разные часовые пояса (-> HST, AKDT, PDT, MDT, CDT, EDT).
 Moritz Petersen13 мая 2012 г., 12:17
Вероятно, дубликат:stackoverflow.com/questions/1723073/…

Ответы на вопрос(1)

Решение Вопроса

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

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

You can add time zone information to user profile (if you have one), or create a time zone combo box (so that the user can switch at runtime). Then you can assign an appropriate object to DateFormat instance and it will convert time zone automatically. You can read the current time zone offset from the client via JavaScript Date Object's getTimezoneOffset() function and somehow (AJAX) send it to the server. The problem with this method is that there are several time zones with that offset, and the selected time zone might be inappropriate for other dates. Of course you can guess the time zone by polling the data around time change date, but this is probably not what you want to do. You can send the unformatted time to the client (for example written as ISO 8601 date-time format or as a Unix time of the epoch in relation to UTC) and have Globalize or Dojo format date and time for you.

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

 08 июн. 2013 г., 17:47
Существует также другая возможность, например, если на вашем сайте указаны часы работы ресторанов. В таком случае посетители ожидают, что часы будут находиться в часовом поясе местоположения ресторана.
 08 июн. 2013 г., 19:38
@herman: Это правда. Часы работы какого-либо магазина, ресторана, библиотеки или чего-либо еще должны быть указаны в местном часовом поясе. Однако обычно это будет текст в произвольной форме, а не форматированная дата, поэтому здесь нет смысла конвертировать часовые пояса. Кроме того, добавление слова «(локально)» имеет смысл, если место часто посещают туристы ...

Ваш ответ на вопрос