6

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 来考虑使用好的时区。但它可能不适合我们的架构。

你还有其他选择吗?

4

1 回答 1

5

我只是在看同样的问题。这个解决方案看起来很有趣: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 设置为日期格式。

于 2012-09-28T09:32:20.007 回答