我有一个小的
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格式.我认为这只是每个设备的操作系统内置什么样的格式资源的问题,尽管仿真器返回错误的格式以及许多美制的设备,我不知道英国开发者的想法,看到这个问题.