2014-10-11 110 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