前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中Calendar跨年的坑「建议收藏」

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

作者头像
全栈程序员站长
发布2022-07-02 09:33:56
1.1K0
发布2022-07-02 09:33:56
举报
文章被收录于专栏:全栈程序员必看

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

上代码:

代码语言:javascript
复制
    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 + "-------------");
    }

运行结果

代码语言:javascript
复制
-------------2021-03-------------

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

代码语言:javascript
复制
    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 + "-------------");
    }

运行结果

代码语言:javascript
复制
-------------2021-12-------------

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

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

代码语言:javascript
复制
    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 + "-------------");
    }

运行结果

代码语言:javascript
复制
-------------2019-12-------------

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档