今天發(fā)現(xiàn)了前一段時(shí)間做的系統(tǒng)的一個(gè)關(guān)于日期的Bug。開始還以為是Calendar的Bug,想了一會(huì)突然發(fā)現(xiàn)是自己的問題。

假設(shè)今天系統(tǒng)時(shí)間是2006年8月31號(hào)。

下面是一段代碼

{
????????
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));?
//這里應(yīng)該是多少?
????????SimpleDateFormat?df?=?new?SimpleDateFormat("yyyyMM");
????????System.out.println(df.format(cal.getTime()));
}

原來預(yù)想的結(jié)果是: 8 和200609
結(jié)果是 9 和 200610

所以在這個(gè)系統(tǒng)里,如果8月31號(hào)查詢9月的內(nèi)容,會(huì)把10月的查出來。

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

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