2012-07-23 6 views
5

MessageFormatクラスは、パラメータを挿入して直接フォーマットすることができるため、クールです。 これにより、メッセージバンドルのプロパティファイルで直接日付書式を簡単に上書きできるようになりました。 exempleについてはTimeZoneとDateFormatを使用したMessageFormat

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

しかし、私は、異なるタイムゾーンで日付を表示する必要がある場合は?私たちが使用している作品で


私は私は私のバンドルにそれらを注入する前にすべての日付をフォーマットすることができます知っているが、これは表示されたすべての日付をフォーマットするための痛みです...

組織.springframework.context.support.ReloadableResourceBundleMessageSource

私はおそらくそれを上書きしようとUSIを検討する自分のMessageFormatを作成することができます良いタイムゾーンしかし、私たちのアーキテクチャにはうまく適合しないかもしれません。

他の方法がありますか?

答えて

4

私はちょうど同じ問題を見ていました。このソリューションは、面白そうだ: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で解析されたフォーマットの上に行くことです、そして日付形式にタイムゾーンを設定します。

+0

ありがとう、これは良いアイデアです! –

+0

ええ、私はそれも考えました。私が見る唯一の問題は、マルチスレッドアクセスを扱う際に注意する必要があることです。必要に応じて、MessageFormat全体のコピーを作成することをお勧めします。 –

関連する問題