今天发现了前一段时间做的系统的一个关于日期的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的时候要小心了。