2014-01-29 66 views
1

我想實現以下場景: 從我的JSF頁面獲取語言環境。從語言環境獲取正確的日期格式和時間格式

現在我想從我的數據庫中的語言環境中保存日期格式。
例子:

區域設置= US
=>String dateformat = "YYYY-MM-dd"

但我怎麼能得到從Locale正確Dateformat

我需要同樣的事情:

  • 正確的時間格式
  • 時區

任何人都可以請舉個例子? 我看到一個庫(jodaTime) 但我該怎麼做?

回答

1

第一句話:對於任何給定的語言環境,通常沒有唯一的日期或時間格式,因爲您還必須考慮精度問題,即樣式。例如在美國,您可以寫出「一月」或「一月」或一個數字(這裏再次至少有兩個變體,即「01」或「1」)。

對問題a)的回答:但確實有一種方法可以爲給定的語言環境提取常見模式。這裏SimpleDateFormat(JodaTime內部使用同樣的方式)的方式:質疑二)

static String getDateFormat(int style, Locale locale) { 
    DateFormat fmt = DateFormat.getDateInstance(style, locale); 

    if (fmt instanceof SimpleDateFormat) { // almost always true 
    return ((SimpleDateFormat) fmt).toPattern(); 
    } else { 
    throw new UnsupportedOperationException("Cannot get date pattern for: " + locale); 
    } 
} 

public static void main(String... args) { 
    System.out.println(getDateFormat(DateFormat.SHORT, Locale.US); 
    // Output: M/d/yy 
} 

答:爲了得到一個時間模式非常相似,只是研究java.text.DateFormat中的javadoc的,有尤其是方法getTimeInstance(int, Locale)

對問題c)的回答:時區概念與本地化無關。例如美國或俄羅斯有幾個時區。反過來,至少在概念上,IANA-TZDB並不排除在一個時區內有多個區域設置。例如,「Europe/San_Marino」只是「歐洲/羅馬」的鏈接/別名,也就是說,不是具有自己數據的獨立時區標識符。但至少爲幫助用戶選擇合適的時區的目的,IANA-TZDB提供內置於TZDB的所有發行此查找表:

https://github.com/eggert/tz/blob/master/zone.tab

不幸的是Java不提供標準的API訪問這個表,甚至沒有新的JSR-310java.time.*Java 8)或Joda-Time,所以它是由你自己評估zone.tab表。根據他/她的偏好,直接從用戶那裏獲得正確的時區可能是更好的方式。例如,在基於網絡的場景中,JavaScript提供解決方案來提取這些信息,然後將其發送到服務器,由Java程序進行處理。看到這個SO-answer

+1

只是要注意:您的示例模式「YYYY-MM-dd」不是特定於我們的模式,甚至不是ISO特定模式。 Y表示週年日(以周爲單位),而應與週年和週日結合以形成周日。你的意思可能是「yyyy-MM-dd」。但這也不是我們特定的。在美國,首先設置月份信息是一種文化習慣。 –

相關問題