2014-10-11 5 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); 

вы используете локаль по умолчанию, и язык по умолчанию связан с текущим языком устройства, если вы меняете язык, язык по умолчанию не соответствует языку, используемому для хранения строки, вызывающей ошибку.

Чтобы избежать этой проблемы, вы должны хранить Locale использовать для получения String date и передать его в DateFormat

DateFormat format = new SimpleDateFormat(formatPattern, localeOfTheDateString); 

или хранить дату непосредственно в качестве объектов GregorianCalendar