TimeZone и MessageFormat с параметрами даты

Класс MessageFormat — это круто, потому что мы можем вставлять параметры и выполнять форматирование непосредственно с ним. Это позволяет мне легко переопределять формат даты непосредственно в файлах свойств пакета сообщений.

Например:

MessageFormat.format("Test inserting a date param here: {0,date,dd/MM/yyyy HH'h'mm} -> OK cool", new Date() );

Но что, если мне нужно отображать дату в разных часовых поясах?

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


В работе мы используем

org.springframework.context.support.ReloadableResourceBundleMessageSource

Я, вероятно, могу попытаться переопределить его и создать свой собственный MessageFormat, который рассмотрит возможность использования хорошего часового пояса. Но это может не подходить для нашей архитектуры.

Вы видите какую-то другую альтернативу?


person Sebastien Lorber    schedule 23.07.2012    source источник


Ответы (1)


Я просто смотрел на ту же проблему. Это решение выглядит интересно: https://groups.google.com/d/msg/comp.lang.java.programmer/1AJIpwtn5HA/zd3Sw8IJrTQJ

public class Format {
  public static void main(String argv[]) {
    MessageFormat mf = new MessageFormat("The time is: {0, time, HH:mm}");


    TimeZone tz = TimeZone.getTimeZone("GMT");
    Object [] formats = mf.getFormats();
    for (int i = 0; i < formats.length; i++) {
        if (formats[i] instanceof SimpleDateFormat) {
            ((SimpleDateFormat)formats[i]).setTimeZone(tz);
        }
    }
    Date date = new Date();
    Object [] args = {date};
    System.out.println(mf.format(args));
  }
}

Идея состоит в том, чтобы пройтись по проанализированным форматам в MessageFormat и установить TimeZone в форматы даты.

person Peter Štibraný    schedule 28.09.2012
comment
Да, я тоже так думал. Единственная проблема, которую я вижу, заключается в том, что вам нужно быть осторожным при работе с многопоточным доступом - лучше создать копию всего MessageFormat, если это необходимо. - person Peter Štibraný; 28.09.2012