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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于多元正态分布的条件概率密度

    关于多元正态分布的条件概率密度原文来自师兄的博客 http blog csdn net wjj article details 多元正态分布多元正态分布的条件密度多元正态分布多元正态分布的密度函数如下 fx x1 xn 1 2 k 1 2exp 12 x T 1 x f x x 1 x n frac 1 sqrt 2 pi

    2025年10月16日
    5
  • 圆周率1千亿位_圆周率十亿位

    圆周率1千亿位_圆周率十亿位展开全部3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852…

    2025年11月8日
    2
  • App界面原型设计工具「建议收藏」

    App界面原型设计工具「建议收藏」首先,一款优秀的移动APP界面原型设计工具应该具备:  ①.支持移动端演示(随时随地演示给BOSS,厕所&食堂&电梯…以体现我是那么的敬业——长点工资必备)  ②.组件库(高效复用,谁用谁知道)  ③.可以快速生成全局流程(程序猿看不懂拆解的,给丫的看这个)  ④.在线协作(多个PM狗一起用)  ⑤.手势操作、转场动画、交互特效…(这些都不需要,留给专业的交互、视觉,

    2022年6月16日
    33
  • java课设_Java 课设

    java课设_Java 课设展开全部简单的五子棋程序新建一个chess类,其中代码如下packagework;importjava.awt.Color;publicclassChess{publicstaticfinalintdiamter=30;privateintx;//在网格中的索引,0~e68a84e8a2ad62616964757a686964616f3133323865663715priva…

    2022年7月12日
    16
  • echarts中国地图使省份选择性滑动或点击高亮「建议收藏」

    echarts中国地图使省份选择性滑动或点击高亮「建议收藏」本文介绍echarts显示中国省份图,对于需要高亮的省份进行筛选。并且对省份进行选择性交互。首先我们需要一个颜色集合,代表我们要设置多少种颜色。这里用到了dataRange。dataRange:{ show:false, x:’left’, y:’bottom’, splitList:[ …

    2022年10月20日
    3
  • 什么是车载以太网_车载以太网结构

    什么是车载以太网_车载以太网结构SOME/IP(ScalableService-OrientedMiddlewarEoverIP):是一种用于传输服务(Service)信息的基于IP的可伸缩中间件,能够适应基于不同操作系统的不同大小的设备,小到摄像头,大到车机或自动驾驶模块;相比于传统的CAN总线的面向信号的通信方式,SOME/IP是一种面向服务的通信方式。 DoIP:基于以太网的诊断传输协…

    2025年8月21日
    3

发表回复

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

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