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配合