根据指定日期获取上一个月
看过不少类似文章,根据一个日期,要取得相应的上一个月的值,则利用Calendar的api:get(Calendar.MONTH) - 1)来算。
思路是对的,但这个api有坑的,例如:当前日期为:2021-03-30,得到的上一月的结果为:202103,但我们期望结果是:202102。
因为Calendar计算时,如果有时间算时间、有天算天,但我们期望结果是得到月,所以要先确保当前日期精确到月,即换算单位相同,具体代码如下,请参考:
DateUtil.YYYYMM常量,即字符串:"yyyyMM"
/**
* 根据指定的日期对象,返回上一个年月字符串
* @param theDate 指定的日期对象
* @return
*/
public static String getLastYearMonth(Date theDate) {
Calendar now = Calendar.getInstance();
String yearMonth;
if (theDate == null) {
yearMonth = DateUtil.format(now.getTime(), DateUtil.YYYYMM);
theDate = DateUtil.convert(yearMonth, DateUtil.YYYYMM);
} else {
yearMonth = DateUtil.format(theDate, DateUtil.YYYYMM);
}
theDate = DateUtil.convert(yearMonth, DateUtil.YYYYMM);
now.setTime(theDate);
now.set(Calendar.MONTH, now.get(Calendar.MONTH) - 1);
return DateUtil.format(now.getTime(), DateUtil.YYYYMM);
}
Good luck!