当用户更改设备语言时,应用程序崩溃

时间:2014-10-11 13:36:30

标签: android parse-error gregorian-calendar

我有一个应用程序存储一些文件中包含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);

我该如何解决这个问题?

请注意,只有在更改设备语言时才会发生此错误,无论日期类型如何。如果设备语言保持不变,则该方法不会导致任何崩溃

1 个答案:

答案 0 :(得分:1)

在这一行

DateFormat format = new SimpleDateFormat(formatPattern);

使用默认语言环境,默认语言环境与设备的当前语言关联,如果更改语言,则默认语言环境与用于存储导致​​错误的字符串的语言环境不匹配。

要避免此问题,您必须存储用于获取Locale的{​​{1}}并将其传递给String date

DateFormat

或将日期直接存储为DateFormat format = new SimpleDateFormat(formatPattern, localeOfTheDateString); 个对象