mWi*_*lis 10 java android locale date-format
我有一个小的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()));
}
Run Code Online (Sandbox Code Playgroud)
因此,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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是 - 为什么所有这些都一样?在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
Run Code Online (Sandbox Code Playgroud)
这是我期望的.我知道我可以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格式.我认为这只是每个设备在操作系统中内置了什么格式资源的问题,尽管仿真器返回了错误的格式以及我的许多美国制造的设备,我想知道英国开发人员的想法,或者他们是否已经看到了这个问题.
尝试这个:
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));
Run Code Online (Sandbox Code Playgroud)