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

我有一个小的 Android应用程序,我使用的是以不同格式打印基于区域设置的特定日期.

这是我的代码(使用java.text.DateFormat):

Locale[] locales = {new Locale("en","US"),new Locale("en","GB"),"AU"),"NZ"),"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程序也显示了问题:

以上是来客网为你收集整理的为什么java.text.DateFormat在Android上为en_US和en_GB返回相同的日期格式?全部内容,希望文章能够帮你解决为什么java.text.DateFormat在Android上为en_US和en_GB返回相同的日期格式?所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。