天天看点

根据指定日期获取上一个月

根据指定日期获取上一个月

看过不少类似文章,根据一个日期,要取得相应的上一个月的值,则利用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!