![](/img/trans.png)
[英]Date.toLocaleString() return Invalid language tag: en_GB but Java.util.Locale Class return en_GB locale for UK
[英]Why does java.text.DateFormat return the same date format for en_US and en_GB on Android?
我有一個小的Android應用程序,我用它來根據語言環境以不同的格式打印特定的日期。
這是我的代碼(使用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 Explorer:
https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en
我已經能夠在不同的設備(包括模擬器)上看到系統為en_GB返回的內容。 有些返回適當的格式,有些返回en_US格式。 我認為這只是每個設備在操作系統中內置了什么格式資源的問題,盡管仿真器返回了錯誤的格式以及我的許多美國制造的設備,我想知道英國開發人員的想法,或者他們是否已經看到了這個問題。
這不是答案(我還沒有足夠的代表添加評論......)
作為一名英國開發人員,我遇到過這個問題。 正如您所描述的那樣,我正在使用Galaxy S3看到這個問題。
我不得不求助於用戶選擇日期格式作為首選項。 不是很好。
DalvikExplorer程序也顯示了問題:
試試這個:
int style = DateFormat.MEDIUM;
//Also try with style = DateFormat.FULL and DateFormat.SHORT
Date date = new Date();
DateFormat df;
df = DateFormat.getDateInstance(style, Locale.UK);
Log.d("Locale.UK","Locale.UK - "+df.format(date));
System.out.println("United Kingdom: " + df.format(date));
df = DateFormat.getDateInstance(style, Locale.US);
Log.d("Locale.US","Locale.US - "+df.format(date));
df = DateFormat.getDateInstance(style, Locale.FRANCE);
Log.d("Locale.FRANCE","Locale.FRANCE - "+df.format(date));
df = DateFormat.getDateInstance(style, Locale.ITALY);
Log.d("Locale.ITALY","Locale.ITALY - "+df.format(date));
df = DateFormat.getDateInstance(style, Locale.JAPAN);
Log.d("Locale.JAPAN","Locale.JAPAN - "+df.format(date));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.