Java一年中最后一天计算月份出现错误

        Date date = Date.valueOf("2016-12-31");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        String month = format.format(date);
        String start = month + "-01 00:00:00";
        String end = month + "-31 23:59:59";

        for(int i = 0; i < 3; i++) {
            System.out.println("before=" + date.getMonth());
            date.setMonth(date.getMonth()-1);
            System.out.println("after=" + date.getMonth());
            month = format.format(date);
            start = month + "-01 00:00:00";
            end = month + "-31 23:59:59";
        }

运行结果

before=11
after=11
before=11
after=10
before=10
after=9

如果改成2016-12-30的话月份计算就正常了,请问是什么原因呢?

http://blog.csdn.net/sd0902/article/details/8393650
看里面的 addMonth (如果减,用负数)

date.setMonth(date.getMonth()-1);
默认减少30天,31日减30为1日,月份不会提前。
你在for循环中输出一下日期就知道了。

最好是用Calendar类做相关的日期计算

Date类很对方法都已经过时,建议使用 Calendar配合