我有一个应用程序存储一些文件中包含String date
的对象,某些操作的字符串需要解析为GregorianCalendar
。现在我发现了这个问题:
当用户在创建文件后更改设备语言时,App无法正确处理存储的文件并崩溃返回此错误
java.text.ParseException: Unparseable date: "27 Sep 2014 23:09:07" (at offset 3)
10-11 14:20:09.573 3745-3745/uk.myapp W/System.err﹕ at java.text.DateFormat.parse(DateFormat.java:561)
返回此错误的方法是
public static GregorianCalendar stringInCalendar(String s, String formatPattern) {
DateFormat format = new SimpleDateFormat(formatPattern);
Date date = null;
try {
date = format.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
return cal;
}
错误发生在line date = format.parse(s);
我该如何解决这个问题?
请注意,只有在更改设备语言时才会发生此错误,无论日期类型如何。如果设备语言保持不变,则该方法不会导致任何崩溃
答案 0 :(得分:1)
在这一行
DateFormat format = new SimpleDateFormat(formatPattern);
使用默认语言环境,默认语言环境与设备的当前语言关联,如果更改语言,则默认语言环境与用于存储导致错误的字符串的语言环境不匹配。
要避免此问题,您必须存储用于获取Locale
的{{1}}并将其传递给String date
DateFormat
或将日期直接存储为DateFormat format = new SimpleDateFormat(formatPattern, localeOfTheDateString);
个对象