当前日期为2019.10.31
原本的写法为:
int year=2019; int month=9; Calendar cal=Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); int date=cal.getActualMaximum(Calendar.DATE) String lastDate=year+month+date;
获取的date是31 最终结果是2019-9-31 是错误的 9月只有30天
经过试验
上述代码未设置日,只设置了年和月,日则取当前日期
由于当前日期是2019.10.31 所以date应该是31 但由于9月份只有30天,整个日期向后自动顺延一天,就变成了2019.10.01。而此时再获取本月最大日天数。就取到了31的值。
修正后的写法:
int year=2019; int month=9; Calendar cal=Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DATE,1); int date=cal.getActualMaximum(Calendar.DATE) String lastDate=year+month+date;
设置日期,为1号 此时获取的日期是2019-09-01 再获取本月最大日期天数 就取到了正确的30天
也可以使用下面这种方式
int year=2019; int month=9; Calendar cal=Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DATE,1); cal.roll(Calendar.DATE, -1); int date=cal.get(Calendar.DATE); String lastDate=year+month+date;
roll(field,value) 方法不会改变 比该单位更大单位的值
比如调用cal.roll(Calendar.Date,1); 只会改变年月日 中的日 而不会改变年和月
即:假如当前是2019.10.31 调用cal.roll(Calendar.Date,1); 后会变成 2019.10.01 而不是2019.11.01
所以上述方式,使用
cal.roll(Calendar.DATE, -1);
是将本月的第一天,改成了本月的最后一天
还没有评论,来说两句吧...