Java获取指定日期的下个月这一天,下年的这一天

根据指定日期获取下一年的这一天

特殊例子:2020/2/29这一天 获取下一年的日期为2021/2/28。其他不变

  public static String sameDayOfNextYear(String dateStr) {
      Calendar cal = setCalendarTime(dateStr);
      cal.add(Calendar.YEAR, 1);
      if (!isLastDayOfMonth(dateStr)) {
          cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DATE));
      } else {
          cal.add(Calendar.MONTH, 1);
          cal.set(Calendar.DAY_OF_MONTH, 0);
      }
      Date time = cal.getTime();
      return dateToStr(time);
  }
 //判断日期是否为月末
  public static boolean isLastDayOfMonth(String dateStr) {
      String format = “yyyy-MM-dd”;
      Calendar cal = setCalendarTime(dateStr, format);

      cal.set(Calendar.DATE, (cal.get(Calendar.DATE) + 1));
      if (cal.get(Calendar.DAY_OF_MONTH) == 1) {
          return true;
      }
      return false;
  }

根据指定日期获取下个月的这一天

特殊例子:如果是月末31号或30号,而下个月没有这一天,将获取下月月末。
如:2020/1/31获取下个月这一天结果为2020/2/29

    public static Date nextEffectiveDate(Date effectiveDate) {
       int year = Integer.parseInt(TimeUtils.format(effectiveDate,"yyyy"));
       int nextMonth =  Integer.parseInt(TimeUtils.format(effectiveDate,"MM"))+1;
       int day = Integer.parseInt(TimeUtils.format(effectiveDate,"dd"));;

       if (nextMonth > 12) {
           nextMonth = 1;
           year += 1;
       }

       StringBuilder sb = new StringBuilder();
       String nextEffectiveDay = appendDate(sb, year, nextMonth, day);

       if (isValidDate(nextEffectiveDay)) {
           return nextEffectiveDay;
       } else {
           Calendar cal = setCalendarTime( new SimpleDateFormat("yyyy-MM-dd").format(effectiveDate));
           cal.set(Calendar.YEAR, year);
           cal.set(Calendar.MONTH, nextMonth);
           cal.set(Calendar.DAY_OF_MONTH, 0);
           nextEffectiveDay = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
       }
       return sdf.parse(nextEffectiveDay);
   }
  //日期拼接
   public static String appendDate(StringBuilder sb, int year, int month, int day) {
       sb.append(year)
               .append('-').append(month > 9 ? month : "0"+month)
               .append('-').append(day > 9 ? day : "0"+day);
       return sb.toString();
   }
   //判断一个日期是否合法
   public static boolean isValidDate(String dateStr) {
       Boolean convertStatus = true;
       //指定日期格式为四位年、两位月份、两位日期,注意 yyyy-MM-dd 区分大小写
       String format = yMd;
       SimpleDateFormat sdf = new SimpleDateFormat(format);
       //设置lenient为false,否则SimpleDateFormat会比较宽松地验证日期。比如:2020-02-29会被接受,并转换成2020-03-01
       sdf.setLenient(false);
       try {
           sdf.parse(dateStr);
       } catch (ParseException e) {
           logger.warn("日期格式不正确!!!"+e.toString());
           convertStatus = false;
       }
       return convertStatus;
   }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值