今天發現了前一段時間做的系統的一個關于日期的Bug。開始還以為是Calendar的Bug,想了一會突然發現是自己的問題。

假設今天系統時間是2006年8月31號。

下面是一段代碼

{
????????
int?year?=?2006;
????????
int?month?=?9;
????????Calendar?cal?
=?Calendar.getInstance();
????????cal.set(Calendar.YEAR, year);
????????cal.set(Calendar.MONTH, month
- 1);
????????System.out.println(cal.get(Calendar.MONTH));?
//這里應該是多少?
????????SimpleDateFormat?df?=?new?SimpleDateFormat("yyyyMM");
????????System.out.println(df.format(cal.getTime()));
}

原來預想的結果是: 8 和200609
結果是 9 和 200610

所以在這個系統里,如果8月31號查詢9月的內容,會把10月的查出來。

其實是Calendar.getIntance()方法返回的Calendar里面的默認時間是當前系統時間。
所以這時的Calendar里Day是31.如果把Month設置成8(九月)。Calendar中的時間就是9月31號,而9月沒有31號,所以就變成了10月1號。這時你在取month的值就變成了9(十月)。

想明白以后,我捶胸頓足??! 以后用Calendar的時候要小心了。