2012-04-27 46 views
10

我有一個小的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日期格式 - MEDIUMLONG展示的Android和Java SE之間的不一致,以及(即Android的返回相同的格式,我指定所有5種語言環境)。

我已經在3個不同的設備(2.3和4.0)以及仿真器(2.3和4.0)上測試過了,所有結果都一樣。我也測試了使用Locale.USLocale.UK只是爲了看看他們是否有所不同,但結果是相同的。

有沒有其他人遇到過這個問題,或者知道爲什麼會這樣?

更新:2012-07-18

看來,這是與模擬器在美國製造的問題,以及儘可能多的設備。使用Dalvik的資源管理器:

https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en

我已經能夠看到什麼系統回報EN_GB在不同的設備(包括模擬器)。一些返回適當的格式,一些返回en_US格式。我認爲這僅僅是每個設備的操作系統內置什麼格式資源的問題,儘管模擬器返回了錯誤的格式以及我的許多美國製造的設備,我不知道英國開發人員認爲什麼,或者如果他們看到了這個問題。

回答

1

試試這個:

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)); 
+0

。美國和英國的格式相同:「2012年4月27日」。我預計英國將成爲「2012年4月27日」。其他人似乎有效,雖然我既不是法國人,也不是意大利人,也不是日本人,所以我不是100%確定的。 ;-) – mWillis 2012-04-27 18:34:12

+0

但如果你得到正確的結果,然後讓傳遞你的定位爲'Locale.ITALY',而不是作爲新的Locale(「en」,「GB」)。 – 2012-04-27 18:37:59

+0

正如我在問題中所述,我已經使用'Locale.UK'和'new Locale(「en」,「GB」)' - 它們是相同的,它們都返回錯誤的格式。 'Locale.ITALY'不在我想要確定的範圍內。 – mWillis 2012-04-27 18:42:02

4

這不是一個答案(我還沒有足夠的代表處添加評論...)

由於英國開發人員,我所遇到的這個問題。正如你所描述的,我正在用我的Galaxy S3看到這個問題。我不得不求助於用戶選擇日期格式作爲首選項。不太好。

的DalvikExplorer計劃也顯示了問題:雖然這幾乎正是我在做什麼(加其他區域設置的),我給它一個鏡頭

enter image description here

+0

感謝您的反饋!這是一個很奇怪的問題,因爲我看過其他設備爲en_GB返回適當的格式。 – mWillis 2012-08-01 19:11:52

+0

是的。我也嘗試過HTC Desire,並且工作正常。 – 2012-08-01 20:08:38

相關問題