ロケールに基づいてさまざまな形式で特定の日付を印刷するために使用している小さな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つのロケールすべてに対して同じ形式を返します)MEDIUM
。LONG
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に組み込まれているフォーマットリソースの問題だと思いますが、エミュレータが間違ったフォーマットと米国製のデバイスの多くを返すため、英国の開発者はどう思いますか、それともこの問題を見てきました。