我想實現以下場景: 從我的JSF頁面獲取語言環境。從語言環境獲取正確的日期格式和時間格式
現在我想從我的數據庫中的語言環境中保存日期格式。
例子:
區域設置= US
=>String dateformat = "YYYY-MM-dd"
但我怎麼能得到從Locale
正確Dateformat
?
我需要同樣的事情:
- 正確的時間格式
- 時區
任何人都可以請舉個例子? 我看到一個庫(jodaTime) 但我該怎麼做?
我想實現以下場景: 從我的JSF頁面獲取語言環境。從語言環境獲取正確的日期格式和時間格式
現在我想從我的數據庫中的語言環境中保存日期格式。
例子:
區域設置= US
=>String dateformat = "YYYY-MM-dd"
但我怎麼能得到從Locale
正確Dateformat
?
我需要同樣的事情:
任何人都可以請舉個例子? 我看到一個庫(jodaTime) 但我該怎麼做?
第一句話:對於任何給定的語言環境,通常沒有唯一的日期或時間格式,因爲您還必須考慮精度問題,即樣式。例如在美國,您可以寫出「一月」或「一月」或一個數字(這裏再次至少有兩個變體,即「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-310(java.time.*在Java 8)或Joda-Time,所以它是由你自己評估zone.tab表。根據他/她的偏好,直接從用戶那裏獲得正確的時區可能是更好的方式。例如,在基於網絡的場景中,JavaScript提供解決方案來提取這些信息,然後將其發送到服務器,由Java程序進行處理。看到這個SO-answer。
只是要注意:您的示例模式「YYYY-MM-dd」不是特定於我們的模式,甚至不是ISO特定模式。 Y表示週年日(以周爲單位),而應與週年和週日結合以形成周日。你的意思可能是「yyyy-MM-dd」。但這也不是我們特定的。在美國,首先設置月份信息是一種文化習慣。 –