Проблема с отображением TimeZone в Java при использовании русского языка - PullRequest
2 голосов
/ 10 августа 2010

Я столкнулся с проблемой при использовании русского языка, часть даты в часовом поясе не конвертируется в русский. то есть, если «10 августа 2010 г. 16:02:09 по якутскому времени» - это время, это превращается в - С русским языком - «10.08.2010 16:02:09 Якутское время 10» С французским языком - «2010 2010 16:02:09 Heure du Iakoutsk»

Я использую следующий код (русский язык поддерживается на моем сервере)

     SimpleDateFormat formatterWithoutTimezone = new SimpleDateFormat(
    "dd-MMM-yyyy HH:mm:ss");

    SimpleDateFormat formatterServerTimezone = new SimpleDateFormat(
    "dd-MMM-yyyy HH:mm:ss zzz");
    TimeZone serverTimezone = TimeZone.getDefault();
    formatterServerTimezone.setTimeZone(serverTimezone);
    String dateSrcStr = formatterWithoutTimezone.format(dateSrc) + " UTC";
    Date dateServerTimezone = formatterServerTimezone.parse(dateSrcStr);
    DateFormat displayFormatter = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
    String formatedDate = displayFormatter.format(dateServerTimezone) + " "
    + serverTimezone.getDisplayName(locale);

Ответы [ 2 ]

3 голосов
/ 10 августа 2010

Имена часовых поясов получены Java из sun.util.resources.TimeZoneNamesBundle. Существует базовый класс ресурсов TimeZoneNames и есть локализации (см. Rt.jar):

TimeZoneNames_de.class  
TimeZoneNames_en.class   
TimeZoneNames_en_CA.class  
TimeZoneNames_en_GB.class  
TimeZoneNames_en_IE.class  
TimeZoneNames_es.class  
TimeZoneNames_fr.class  
TimeZoneNames_it.class  
TimeZoneNames_sv.class  

Таким образом, только указанные языки имеют локализованные названия часовых поясов. Следующий тест подтверждает, что большинство локалей не имеют локализованных имен часовых поясов:

TimeZone timeZone = TimeZone.getTimeZone("Asia/Yakutsk");
for (Locale locale : Locale.getAvailableLocales()) {
    System.out.println(locale.getDisplayName() + timeZone.getDisplayName(locale));
}
0 голосов
/ 10 августа 2010

Java имеет собственные встроенные определения часовых поясов. Если предположить, что ваш часовой пояс установлен на вашем сервере, то, возможно, проблема заключается в определениях Java. Найдите tzupdater , чтобы узнать, нужно ли вам найти более новую версию часовых поясов или создать свою собственную. Если вы используете старую JVM, попробуйте получить последнюю версию, чтобы узнать, поддерживается ли ваш часовой пояс.

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