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 に答える