2011-09-09 48 views
0

我使用SimpleDateFormat從日期中提取相關信息。它在模擬器中工作得很好,但是在設備上測試時無法正確格式化。 Logcat在模擬器中正確顯示它,但是對手機來說又是錯誤的。SimpleDateFormat在模擬器上正常工作,並且在設備上出錯

private String getSectionHeaderTitle(Date date) { 
    SimpleDateFormat dayFormat = new SimpleDateFormat("E"); 
    SimpleDateFormat monthFormat = new SimpleDateFormat("MMM"); 
    SimpleDateFormat dayNumFormat = new SimpleDateFormat("dd"); 
    SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy"); 

    String dayString = dayFormat.format(date); 
    String monthString = monthFormat.format(date); 
    String dayNumString = dayNumFormat.format(date); 
    String yearString = yearFormat.format(date); 

    String headerTitle = dayString + ", " + monthString + " " 
      + dayNumString + " " + yearString; 

    Log.i(TAG, "Date " + date + " Day " + dayString + ", " + " Month " 
      + monthString + " Year " + yearString); 
    Log.d(TAG, headerTitle); 
    return headerTitle; 
} 

日誌中的仿真器2.3.3:

09-09 13:13:55.435: INFO/EventsListActivity(4252): Date 2011-12-11 Day Sun, Month Dec Year 2011 
09-09 13:13:55.435: DEBUG/EventsListActivity(4252): Sun, Dec 11 2011 

日誌中的設備2.3.4:

09-09 18:30:34.203: INFO/EventsListActivity(7962): Date 2011-10-16 Day 1, Month 10 Year 2011 
09-09 18:30:34.203: DEBUG/EventsListActivity(7962): 1, 10 16 2011 

任何幫助不勝感激。

回答

3

SimpleDateFormat使用的符號(即'Sun'vs'1')通過SimpleDateFormat的DateFormatSymbols成員設置。

在您提供的代碼中,由於使用了系統的默認語言環境,因此未明確設置語言環境,因此存儲在該語言環境中的部分信息是DateFormatSymbols對象。

通常,它不是一個好主意,相信默認區域設置是正確的,它可以因系統和其他因素而有所不同。

這正是上述代碼中發生的情況,模擬器具有與設備不同的默認語言環境,因此具有不同的DateFormatSymbols集合。基於你的輸出,我猜測設備默認爲Locale.ROOT語言環境,它只打印出沒有語言的整數值。

最簡單的修復方法是手動設置用於SimpleDateFormat對象的語言環境。

Locale locale = Locale.US; //or whatever you want, see note below 

SimpleDateFormat dayFormat = new SimpleDateFormat("E", locale); 
SimpleDateFormat monthFormat = new SimpleDateFormat("MMM", locale); 
SimpleDateFormat dayNumFormat = new SimpleDateFormat("dd", locale); 
SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", locale); 

有關可用語言環境見http://developer.android.com/reference/java/util/Locale.html#default_locale或者您也可以通過Locale.getAvailableLocales()方法,通過看他們。

+0

非常感謝您的解答和幫助。 – Sam

相關問題