2012-07-19 53 views
1

我討厭發佈另一個SimpleDateFormat問題,但我無法在Google或其他主題上找到我的答案。我的代碼在下面,註釋表明問題。null由SimpleDateFormat.parse()分配的日期

// The dateString format is "Thu Jul 19 00:04:11 +0000 2012". I confirmed that there 
// is no preceding or trailing white space. 
public static GregorianCalendar stringToDate(String dateString) { 

    GregorianCalendar calendar = new GregorianCalendar(); 

    ParsePosition pos = new ParsePosition(0); 

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM d H:mm:ss Z yyyy"); 

    Date date = simpleDateFormat.parse(dateString, pos); 


    // 'Unknown Source' error thrown by setTime() as date is ultimately null. 
    calendar.setTime(date); 

    return calendar; 

} 

我已經證明了我的dateString參數來通過正確的,我的位置對象從0開始,我已經對http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html審查SimpleDateFormat的無數次。它看起來很合適,但我仍然測試了'd'和'H'的各種排列。我唯一能想到的是,使用這個我失蹤的東西還是有一些細微的差別,或者我是遠離基地的。

這編譯(javac 1.6.0_33),但運行時(java版本「1.6.0_33」),即使傳遞給它的第一個dateString值也不會處理。我正在運行Windows 7 64位,日文版。

任何幫助,非常感謝。

+2

嘗試更改「H:mm:ss」爲「HH:mm:ss」 – 2012-07-19 05:44:09

+0

這是我嘗試過的一種排列方式,但它也不起作用(重新編譯兩次以確保)。 – Structure 2012-07-19 05:47:48

+1

你確定*這就是你的代碼的樣子?你沒有任何try/catch塊?我不認爲'parse'永遠不會返回null - 如果解析失敗,它會拋出異常。 – 2012-07-19 05:50:21

回答

4

如果您的計算機上的當前語言環境是日語(這很可能是這種情況),那麼SimpleDateFormat將採用默認語言環境(日語),並嘗試用它解析日期。

如果日期字符串始終爲英文,則應在SimpleDateFormat constructor中指定Locale.US

+0

非常感謝。我添加了一行'Locale locale = new Locale(「US」);'並將'locale'變量放到我的SimpleDateFormat構造函數中。這工作!它顯示'EDT',而不是我想要的RFC822代碼,但我可以稍後再分類。 – Structure 2012-07-19 06:06:04