Java中Calendar跨年的坑「建议收藏」

Java中Calendar跨年的坑「建议收藏」上代码:publicstaticvoidmain(String[]args)throwsException{SimpleDateFormatsimpleDateFormat=newSimpleDateFormat(“yyyy-MM”);Calendarcalendar=Calendar.getInstance();calendar.setTime(simpleDateFormat.parse(“2021-08”)

大家好,又见面了,我是你们的朋友全栈君。

上代码:

    public static void main(String[] args) throws Exception{ 
   

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.roll(Calendar.MONTH, -5);

        String date = simpleDateFormat.format(calendar.getTime());

        System.out.println("-------------" + date + "-------------");
    }

运行结果

-------------2021-03-------------

可以看到,减去5个月得到的日期是没有问题的,但是减去超过一年时就有问题了,再试试减20个月

    public static void main(String[] args) throws Exception{ 
   

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.roll(Calendar.MONTH, -20);

        String date = simpleDateFormat.format(calendar.getTime());
        
        System.out.println("-------------" + date + "-------------");
    }

运行结果

-------------2021-12-------------

日期不对了,正确日期应该是:2019-12

解决办法:将roll方法换成add,roll方法只能在当前年进行计算,add方法可以进行跨年计算

    public static void main(String[] args) throws Exception { 
   

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.add(Calendar.MONTH, -20);

        String date = simpleDateFormat.format(calendar.getTime());

        System.out.println("-------------" + date + "-------------");
    }

运行结果

-------------2019-12-------------
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130265.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网络基础知识题_各种基础类型

    网络基础知识题_各种基础类型本文结合多年来的工作实践,来详细讲述一下作为IT从业人员要掌握的一些基础网络知识。

    2025年8月2日
    7
  • 如何安装java-jdk「建议收藏」

    之前第一次安装java-jdk时,因为不太懂,中间出新了很多问题,所以这次安装想记录下。1.进入oracle官网:www.oracle.com2.将Accept前选中,下载jdk,3.打开下载文件夹,双击程序安装4.安装时可以修改路径,这里选择默认路径C:\ProgramFiles\Java\jdk-11.0.25.发现安装完成后并不能使用因为javac.exe在C:\Pr…

    2022年4月5日
    41
  • vue生成二维码并保存图片_php二维码生成代码

    vue生成二维码并保存图片_php二维码生成代码图片地址生成二维码

    2025年9月18日
    7
  • XXE攻防

    XXE攻防目录前言什么是XXE脑图什么是XMLXML基本语法文档类型定义(DTD)实体XXE攻击分类检测XXE存在任意文件读取SSRF攻击执行系统命令探测内网端口BlindXXE漏洞靶机实测Vulnhub搭建任意文件读取获取flag靶机实测XXE-lab防御方式使用开发语言提供的禁用外部实体的方法过滤用户提交的XML数据参考前言什么是XXEXXE(XMLExternalEntityInjection)即XML外部实体注入,攻击者通过向服务器注入指定的XML实体内容,从而让服务器按照指定的配置进行执行,

    2022年5月24日
    42
  • java递归如何退出_递归删除数组某个元素

    java递归如何退出_递归删除数组某个元素###Java递归删除文件publicstaticvoidmain(String[]args){Filefile=newFile(“D:\\dir”);recursiveDelete(file);}###recursiveDelete方法privatestaticvoidrecursiveDelete(Filefile){if(file.isDirectory())…

    2022年9月18日
    2
  • Quartus ii 软件仿真基本流程(使用VHDL)「建议收藏」

    Quartus ii 软件仿真基本流程(使用VHDL)「建议收藏」Quartusii软件仿真基本流程(使用VHDL)文章首发于我的个人博客这是VHDL系列教程的第一个教程。所谓教程,其实也就是记录我本人在学习过程中遇到的问题和学习内容的笔记,分享在这里供其他初学者参考,如果博客中出现任何错误或不严谨的地方,您可以在下方评论区指出来,您的反馈是对我最大的帮助,万分感谢。这篇博客主要介绍使用Quartusii软件进行仿真的步骤,由于是第一篇所以过程详细但有些冗余(问题不大),之后的教程应该专注于VHDL语言本身以及Quartusii的一些使用技巧。本教程将用

    2022年10月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号