JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

 更新时间:2025年12月11日 14:17:08   作者:辛晨V  
在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(如5月1日),这是为了确保日期计算的准确性

JAVA Calendar设置上个月时,日期不存在或错误提示

java进行日期计算时

上个月日期一般使用:

 calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); // 设置为上一个月

进行,操作,但是当月份不存在、日期不存在如:4.31 2.31 不存在的日期时,处理就容易出现问题,此处仅提供思路可以按照自己显示。

Calendar calendar = Calendar.getInstance();
calendar.setTime(date); // 设置为当前时间

如果出现不存在的日期会自动按照日期数进行推算

如4.31会自动生成5.1 2.31会自动生成3.3号,并不是所有的都顺延到下个月1号。

知道这里就知道该怎么办了

/**
     * 获取上个月的今天
     * @param time
     * @return
     */
    public static String getPreviousMonth(String time,String SimpleDateFormat) {
        try {
            if(StringUtils.isBlank(time)){
                return "";
            }
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(SimpleDateFormat);//注意月份是MM
            Date date = simpleDateFormat.parse(time);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date); // 设置为当前时间
            if(!time.equals(simpleDateFormat.format(date))){//如果当前日期不存在,系统会自动往后推。需要重置为1号
                calendar.set(Calendar.DATE, 1); //
            }
            int oldMonth = calendar.get(Calendar.MONTH);
            calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); // 设置为上一个月
            int newMonth = calendar.get(Calendar.MONTH);
            if(oldMonth == newMonth){
                calendar.set(Calendar.DATE, 1);
            }
            if(!time.equals(simpleDateFormat.format(date))){//判断如果是当前日期不存在,需要往前推一天(如11.31应该返回10.31)
                calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1); // 设置为上一个天
                calendar.getTime();
                int day = Integer.parseInt(StringUtils.substring(time, StringUtils.lastIndexOf(time, "-") + 1, time.length()));
                calendar.set(Calendar.DATE, day);
            }
            date = calendar.getTime();
            return simpleDateFormat.format(date);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 链表的定义与简单实例

    Java 链表的定义与简单实例

    这篇文章主要介绍了 Java 链表的定义与简单实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • java中的转义字符介绍

    java中的转义字符介绍

    普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的
    2013-09-09
  • Java集合之Map接口与实现类详解

    Java集合之Map接口与实现类详解

    这篇文章主要为大家详细介绍了Java集合中的Map接口与实现类,文中的示例代码讲解详细,对我们学习Java有一定的帮助,感兴趣的可以了解一下
    2022-12-12
  • java多线程之铁路售票系统

    java多线程之铁路售票系统

    这篇文章主要为大家详细介绍了java多线程之铁路售票系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Java 从互联网上爬邮箱代码示例

    Java 从互联网上爬邮箱代码示例

    这篇文章介绍了Java 从互联网上爬邮箱的有关内容,主要是一个代码示例,小编觉得挺不错的,这里给大家分享下,需要的朋友可以了解。
    2017-10-10
  • 在2023idea中实现SpringBoot的IoC和AOP的方法

    在2023idea中实现SpringBoot的IoC和AOP的方法

    这篇文档详细介绍了如何在Spring Boot中实现IoC(控制反转)和AOP(面向切面编程),深入探讨了AOP的基本概念,包括AOP的作用、优势以及实现方式,最后,它提到了AOP的注解,如@Aspect、@Pointcut、@Before、@After、@AfterReturning、@AfterThrowing和@Around
    2024-11-11
  • 关于Object中equals方法和hashCode方法判断的分析

    关于Object中equals方法和hashCode方法判断的分析

    今天小编就为大家分享一篇关于关于Object中equals方法和hashCode方法判断的分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java并发J.U.C并发容器类list set queue

    Java并发J.U.C并发容器类list set queue

    这篇文章主要为大家介绍了Java并发,J.U.C并发容器类list set queue,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Spring Boot 框架详细指南

    Spring Boot 框架详细指南

    Spring Boot 是由 Pivotal 团队开发的一个开源 Java 框架,旨在简化 Spring 应用程序的创建和开发过程,这篇文章主要介绍了Spring Boot 框架详细指南,需要的朋友可以参考下
    2025-05-05
  • Jenkins+maven持续集成的实现

    Jenkins+maven持续集成的实现

    这篇文章主要介绍了Jenkins+maven持续集成的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论