2012-07-23 26 views
5

MessageFormat類很酷,因爲我們可以直接插入參數並直接進行格式設置。 這使我能夠輕鬆地在消息包屬性文件中直接覆蓋日期格式。帶日期參數的TimeZone和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

我可以嘗試重寫它,並創建我自己的MessageFormat,它會考慮使用usi良好的時區。但它可能不適合我們的建築。

您是否看到其他選擇?

回答

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

謝謝,這是一個不錯的主意! – 2012-09-28 09:40:56

+0

是的,我也這麼認爲。我看到的唯一問題是,在處理多線程訪問時需要小心 - 如果需要,可以更好地創建整個MessageFormat的副本。 – 2012-09-28 09:51:12