2014-10-11 114 views
1

我有一个应用程序存储一些文件上包含String date的对象,此字符串对于某些操作需要解析为GregorianCalendar。现在我发现这个问题: 当用户改变创建该文件的应用程序变得无法正确地处理存储的文件后,设备语言和崩溃返回该错误当用户更改设备语言时应用程序崩溃

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

在这一行

DateFormat format = new SimpleDateFormat(formatPattern); 

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

为了避免这个问题,你必须存储用于获取String date并把它传递给DateFormat

DateFormat format = new SimpleDateFormat(formatPattern, localeOfTheDateString); 

,或者直接存储日期为GregorianCalendar对象

Locale