SimpleDateFormat 使用的符号(即“Sun”与“1”)是通过 SimpleDateFormat 的 DateFormatSymbols 成员设置的。
在您提供的代码中,您没有显式设置区域设置,因此使用系统的默认区域设置,该区域设置中存储的部分信息是 DateFormatSymbols 对象。
一般来说,相信默认区域设置是正确的从来都不是一个好主意,它可能因系统和其他因素而异。
这正是上面代码中发生的情况,模拟器具有与设备不同的默认区域设置,因此具有不同的 DateFormatSymbols 集。根据您的输出,我猜测设备默认为 Locale.ROOT 语言环境,它只打印出没有语言的整数值。
最简单的修复方法是手动设置 SimpleDateFormat 对象使用的区域设置。
Locale locale = Locale.US; //or whatever you want, see note below
SimpleDateFormat dayFormat = new SimpleDateFormat("E", locale);
SimpleDateFormat monthFormat = new SimpleDateFormat("MMM", locale);
SimpleDateFormat dayNumFormat = new SimpleDateFormat("dd", locale);
SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", locale);
See http://developer.android.com/reference/java/util/Locale.html#default_locale http://developer.android.com/reference/java/util/Locale.html#default_locale获取可用的区域设置,或者您可以通过 Locale.getAvailableLocales() 方法查看它们。