我有一个小型 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
日期格式 -MEDIUM
并且还LONG
显示了 Android 和 Java SE 之间的不一致(即,Android 对我指定的所有 5 个区域设置返回相同的格式)。
我已经在 3 种不同的设备(2.3 和 4.0)和模拟器(2.3 和 4.0)上对其进行了测试,结果都相同。我还测试了使用Locale.US
andLocale.UK
只是为了看看它们是否有所不同,但结果是一样的。
有没有其他人遇到过这个,或者知道为什么会这样?
更新:2012-07-18
这似乎是模拟器以及美国制造的许多设备的问题。使用 Dalvik 资源管理器:
https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en
我已经能够看到系统在不同设备(包括模拟器)上为 en_GB 返回了什么。有些返回适当的格式,有些返回 en_US 格式。我认为这只是每个设备的操作系统中内置了哪些格式资源的问题,尽管模拟器返回错误的格式以及我的许多美国制造的设备,我想知道英国开发人员的想法,或者他们是否见过这个问题。