解析出現問題。你並沒有因此而發現它:
catch (ParseException e) {
}
這基本上是說:「我不在乎什麼出了問題 - 忽略它。」在最少你應該記錄錯誤,並更有可能讓異常冒泡。
例外是一個令人難以置信的重要診斷工具 - 不要只是抓住他們,忽視他們。
編輯︰現在問題的變化,我們可以看到異常 - 但代碼仍然繼續,就好像什麼都沒有發生。即使你做想要大多忽略異常,你需要決定什麼值你想要date
如果解析失敗。顯然null
是無益的 - 所以你需要或讓異常冒泡(讓來電者知道解析失敗)或返回一些差異值(例如默認日期,或今天,或類似的東西)。
現在,碰巧,讓異常冒泡使代碼更簡單。它不會在我的機器上拋出一個異常,但也許它會在你的:
import java.util.*;
import java.text.*;
public class Test {
public static void main(String[] args) throws Exception {
Calendar cal = parseReturnDate("19 AUG 2011");
System.out.println(cal);
}
public static Calendar parseReturnDate(String returnDate)
throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy");
Date date = formatter.parse(returnDate);
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal;
}
}
注意,我們都不怎麼需要單獨聲明變量來分配他們的價值觀,而現在我們讓例外泡沫起來,我們可以直接指定date
它的有用值。
我的猜測是您的默認時區不使用「AUG」作爲一個簡短的月份名稱 - 但我沒有看到異常,我真的不知道。如果是這樣的話,你可能要構建格式化時指定的區域設置:
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy",
Locale.US);
您威力還需要指定一個時區。
(順便說一下,Joda Time是一個非常優越的日期和時間處理API。如果你正在做與價值的任何顯著的工作之後,我肯定建議使用它在Date
/Calendar
。)
無法重現,這是按預期對我工作 – dpsdce
絕對*的例外*是有用的,並且在提問時應該*總是*。 「日期」仍然爲空的事實是次要的 - 這是您需要解決的例外情況。請參閱我的答案的底部以獲取建議的解決方案。 –