我曾经遇到过同样的问题。您可以检查是否存在土耳其语言环境。
顺便说一句,最好从strings.xml
. 将来为您的应用程序添加多语言支持会更容易。只需从日期对象中获取具有默认语言环境的月份编号,并从您的月份数组中获取它的引用。
编辑:我想知道 api 级别之间存在这种差异的原因,并下载了 api 级别 10 和 14 的源代码,然后开始调试。
原因:很快,差异来自于java.text.DateFormatSymbols
阶级。两个 api 都有相同的代码,但它们使用不同版本(或具有不同行为)的libcore.icu.LocaleData
. 哪个负责初始化DateFormatSymbols
实例。
详细信息:
如果SimpleDateFormat
实例是使用语言环境创建的,则此参数用于实例化其名为的属性formatData
(它是 的实例DateFormatSymbols
)。
它的构造函数:
从 API 级别 10 和 14java.text.DateFormatSymbols
public DateFormatSymbols(Locale locale) {
this.locale = locale;
this.localPatternChars = SimpleDateFormat.PATTERN_CHARS;
LocaleData localeData = LocaleData.get(locale);
this.ampms = localeData.amPm;
this.eras = localeData.eras;
this.months = localeData.longMonthNames;
this.shortMonths = localeData.shortMonthNames;
this.weekdays = localeData.longWeekdayNames;
this.shortWeekdays = localeData.shortWeekdayNames;
// ICU/Android extensions.
this.longStandAloneMonths = localeData.longStandAloneMonthNames;
this.shortStandAloneMonths = localeData.shortStandAloneMonthNames;
this.longStandAloneWeekdays = localeData.longStandAloneWeekdayNames;
this.shortStandAloneWeekdays = localeData.shortStandAloneWeekdayNames;
}
我无法调试,libcore.icu.LocaleData
但差异来自那个类。LocalData
对于 api 级别 10 和 14,值的加载方式与实例不同。可以调查更改日志以查找 LocaleData 上的差异
Sum:
如果SimpleDateFormat
在 Api Level 10 之前使用未定义的语言环境(例如“xx”)创建 a,则系统使用默认语言环境输出的数字表示(对于月份名称 [1..12]、日期名称 [1..6]) . 在 API 级别 14 之后,如果未找到语言环境,则基于默认语言环境显示输出。(我还没有在 api 级别 11、12、13 上测试过。)
我建议你使用系统的默认语言环境。如果您必须使用任何语言环境,请首先检查它是否已定义。如果未定义,请编写您自己的逻辑。
如果您想显示日期,请考虑我在此答案上的 2. 行。