2010-10-26 15 views
1

配置模式對於每種樣式 - SHORT,MEDIUM,LONG和FULL,有沒有辦法爲由DateFormat的getDateInstance()返回的字符串值配置模式?如何爲DateFormat的getDateInstance()

例如,DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US)將始終返回類似於1952年1月12日的值。1952年1月12日如何獲得此回報?

回答

2

您可以使用SimpleDateFormat自定義您自己的日期格式。

String formatted = new SimpleDateFormat("yyyy, MMM dd").format(new Date(52, 0, 12)); 
    System.out.println(formatted); //prints "1952, Jan 12" 

編輯

好吧,如果你想覆蓋的只是一些具體的語言環境中,你可以配置你自己DateFormatProvider:

class CustomDateFormatProvider extends DateFormatProvider { 
    public DateFormat getDateInstance(int style, Locale locale) { 
     if (style == DateFormat.MEDIUM && Locale.US.equals(locale)) { 
      return new SimpleDateFormat("yyyy, MMM dd"); 
     } 
     //else do default behaviour 
    } 

    //... 
} 

這可以使用Java擴展機制安裝。請參閱LocaleServiceProvider

如果這不是你要找的,你應該添加一些實際的要求到你的問題。我提出了你問的問題,但似乎有一個問題你沒有問你還在等待答案。

但顯然這隻會改變你特別覆蓋的那些。

+0

然後,您將對所有語言環境使用固定格式。我正在尋找解決方案來自定義日期格式,同時支持國際化。 – 2010-10-26 18:46:20

+0

@Tom:那麼你爲什麼不堅持語言環境提供的內容呢?你基本上說你不想按照標準進行本地化,但你仍然想本地化?不能雙方都有。當然,你總是可以製作一種實用方法來根據區域設置來做一些自定義的事情。 – 2010-10-26 18:47:01

+0

「標準格式」是Java規範決定的內容,通常與運行Java應用程序的系統不一致。我想支持標準Java應用程序(即DateFormat的getDateInstance())的方式進行本地化,但想要自定義實際值(即模式)。使用ResourceBundle是本地化Java應用程序的標準方式,但每個應用程序都可以自由定製ResourceBundle。 – 2010-10-26 18:53:50