10

ロケールに基づいてさまざまな形式で特定の日付を印刷するために使用している小さな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日付形式だけでなく、AndroidとJava SEの間の不一致も示します(つまり、Androidは指定した5つのロケールすべてに対して同じ形式を返します)MEDIUMLONG

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形式を返すものもあります。これは、各デバイスのOSに組み込まれているフォーマットリソースの問題だと思いますが、エミュレータが間違ったフォーマットと米国製のデバイスの多くを返すため、英国の開発者はどう思いますか、それともこの問題を見てきました。

4

2 に答える 2

4

これは答えではありません(コメントを追加するのに十分な担当者がまだいません...)

英国の開発者として、私はこの問題に遭遇しました。あなたが説明したように、GalaxyS3でこの問題が発生しています。

ユーザーが好みとして日付形式を選択できるようにする必要があります。あまりよくない。

DalvikExplorerプログラムも問題を示しています。

ここに画像の説明を入力してください

于 2012-08-01T15:06:11.483 に答える
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));
于 2012-04-27T18:28:35.477 に答える