簡體   English   中英

為什么java.text.DateFormat在Android上為en_US和en_GB返回相同的日期格式?

[英]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日期格式 - MEDIUMLONG顯示Android和Java SE之間的不一致(即Android為我指定的所有5個語言環境返回相同的格式)。

我已經在3種不同的設備(2.3和4.0)和仿真器(2.3和4.0)上進行了測試,結果相同。 我還測試了使用Locale.USLocale.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM