美文网首页
Date月份减一的时候实际上没有减的情况

Date月份减一的时候实际上没有减的情况

作者: Slience无言 | 来源:发表于2017-01-02 21:04 被阅读0次

起因

是有这么一个功能需求,统计最近四个月的订单情况,我的想法是获取当前时间点这个月的开始的第一秒和结束的第一秒以及前三个月的开始第一秒结束第一秒这个时间段,我是通过date.setMonth来设置月份以便跳到上一个月的

        Date date = Date.valueOf("2016-12-31");//当前时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        String month = format.format(date);
        String start = month + "-01 00:00:00";
        String end = month + "-31 23:59:59";
        
        for(int i = 0; i < 3; i++) {
            System.out.println("before=" + date.getMonth());
            int temp = date.getMonth()-1;
            date.setMonth(temp);
            System.out.println("after=" + date.getMonth());
            month = format.format(date);
            start = month + "-01 00:00:00";
            end = month + "-31 23:59:59";
        }

测试上线,没啥问题
但是到了2016年12月31日的时候发现统计的内容居然有两个最近一月,然后我就写了上面那段代码,发现运行的结果是这样的

before=11
after=11
before=11
after=10
before=10
after=9

也就是说有两次11月的

原因

可以看Java源代码的setMonth的注释得到原因
2016-12-31被减去了一个月如果用Date计算的话,结果是2016-11-31,但是根本没有2016-11-31这一天,所以系统把他进位了到了2016-12-1,所以造成了第一次for的时候输出两个都是11,2016-10-31也有这一种情况。

解决办法

使用Calendar来进行日期的计算
上文中的代码如果使用Calender来计算的话是这样的

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        java.util.Date date = calendar.getTime();
        System.out.println(format.format(date));
        
        for(int i = 0; i < 3; i++) {
            calendar.add(Calendar.MONTH, -1);
            java.util.Date temp = calendar.getTime();
            System.out.println(format.format(temp));
        }

涉及日期计算最好使用Calendar

相关文章

  • Date月份减一的时候实际上没有减的情况

    起因 是有这么一个功能需求,统计最近四个月的订单情况,我的想法是获取当前时间点这个月的开始的第一秒和结束的第一秒以...

  • 一.shell那些坑

    1. date month问题 解释: shell计算month会先直接拿当前月份(如果指定日期就按照指定日期)减...

  • 【案例】创新性作业描述

    双减背景下,为学生减负成关注焦点。减作业减培训但是不能减能力,不能减效果。 在没有任何教辅的情况下,学生的作业更需...

  • 脂20如何减肥,一个月可以减多少

    不少朋友经常会问一些关于脂20减脂的问题。 比如:“脂20一盒可以减多少啊,一个月可以减脂多少啊“ 实际上,减脂的...

  • 脂20是如何减脂的,一个月可减多少脂20价格多少

    不少朋友经常会问一些关于脂20减脂的问题。 比如:“脂20一盒可以减多少啊,一个月可以减脂多少啊“ 实际上,减脂的...

  • 脂20减肥可以减脂多少

    不少朋友经常会问一些关于脂20减脂的问题。比如:“脂20一盒可以减多少啊,一个月可以减脂多少啊“ 实际上,减脂的本...

  • 倒计时

    一、原理 注意: 1、Date()函数可以传入具体的时间,来获取你想要得到的一个时间。 2、在js中月份需要减1个...

  • 减重日记7

    10月份的减重目标:65~67kg 达成 11月份的减重目标:60~62kg 努力

  • 运算符

    new Date() 获取当前日期毫秒数 加 减 乘/ 除% 求余 ++i 自增i++ 结果之后自增--i 自减i...

  • 电商相关

    预扣库存 商品发布时,可以选择扣减库存模式为 拍下减库存或者付款减库存。 但是拍减存在恶拍情况;付款减库存存在超卖...

网友评论

      本文标题:Date月份减一的时候实际上没有减的情况

      本文链接:https://www.haomeiwen.com/subject/fuxgvttx.html