我有一個小的Android應用程序,我正在使用基於區域設置以不同格式打印特定日期。爲什麼java.text.DateFormat在Android上爲en_US和en_GB返回相同的日期格式?
這裏是我的代碼(使用java.text.DateFormat
):
Locale[] locales = {new Locale("en", "US"), new Locale("en", "GB"), new Locale("en", "AU"), new Locale("en", "NZ"), new Locale("en", "ZA")};
for(int i = 0; i < locales.length; ++i) {
Log.d(logKey, locales[i].toString() + " - " + DateFormat.getDateInstance(DateFormat.SHORT, locales[i]).format(Calendar.getInstance().getTime()));
}
從此在logcat的輸出是這樣的:
D/FormatPoC( 390): en_US - 4/27/12
D/FormatPoC( 390): en_GB - 4/27/12
D/FormatPoC( 390): en_AU - 4/27/12
D/FormatPoC( 390): en_NZ - 4/27/12
D/FormatPoC( 390): en_ZA - 4/27/12
所以我的問題是 - 爲什麼所有這些一樣嗎?在Java SE中,我得到:
en_US - 4/27/12
en_GB - 27/04/12
en_AU - 27/04/12
en_NZ - 27/04/12
en_ZA - 2012/04/27
這是我所期望的。我知道我可以使用android.text.format.DateFormat
根據用戶的當前語言環境和日期順序設置獲取正確的結果,但這並不能解釋爲什麼使用java.text.DateFormat
獲取以編程方式指定的語言環境的格式不會返回正確的結果。
此外,它不只是SHORT
日期格式 - MEDIUM
和LONG
展示的Android和Java SE之間的不一致,以及(即Android的返回相同的格式,我指定所有5種語言環境)。
我已經在3個不同的設備(2.3和4.0)以及仿真器(2.3和4.0)上測試過了,所有結果都一樣。我也測試了使用Locale.US
和Locale.UK
只是爲了看看他們是否有所不同,但結果是相同的。
有沒有其他人遇到過這個問題,或者知道爲什麼會這樣?
更新:2012-07-18
看來,這是與模擬器在美國製造的問題,以及儘可能多的設備。使用Dalvik的資源管理器:
https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en
我已經能夠看到什麼系統回報EN_GB在不同的設備(包括模擬器)。一些返回適當的格式,一些返回en_US格式。我認爲這僅僅是每個設備的操作系統內置什麼格式資源的問題,儘管模擬器返回了錯誤的格式以及我的許多美國製造的設備,我不知道英國開發人員認爲什麼,或者如果他們看到了這個問題。
。美國和英國的格式相同:「2012年4月27日」。我預計英國將成爲「2012年4月27日」。其他人似乎有效,雖然我既不是法國人,也不是意大利人,也不是日本人,所以我不是100%確定的。 ;-) – mWillis 2012-04-27 18:34:12
但如果你得到正確的結果,然後讓傳遞你的定位爲'Locale.ITALY',而不是作爲新的Locale(「en」,「GB」)。 – 2012-04-27 18:37:59
正如我在問題中所述,我已經使用'Locale.UK'和'new Locale(「en」,「GB」)' - 它們是相同的,它們都返回錯誤的格式。 'Locale.ITALY'不在我想要確定的範圍內。 – mWillis 2012-04-27 18:42:02