u010513756
_Slience_
2016-12-31 07:43
采纳率: 50%
浏览 1.2k

Java一年中最后一天计算月份出现错误

        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());
            date.setMonth(date.getMonth()-1);
            System.out.println("after=" + date.getMonth());
            month = format.format(date);
            start = month + "-01 00:00:00";
            end = month + "-31 23:59:59";
        }

运行结果

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

如果改成2016-12-30的话月份计算就正常了,请问是什么原因呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • caozhy

    http://blog.csdn.net/sd0902/article/details/8393650
    看里面的 addMonth (如果减,用负数)

    点赞 评论
  • liangyu_fei
    Eid 2016-12-31 09:47

    date.setMonth(date.getMonth()-1);
    默认减少30天,31日减30为1日,月份不会提前。
    你在for循环中输出一下日期就知道了。

    点赞 评论
  • u011606457
    _1_1_7_ 2017-01-01 05:09

    最好是用Calendar类做相关的日期计算

    点赞 评论
  • liumengya007007
    liumengya007007 2017-01-03 02:38

    Date类很对方法都已经过时,建议使用 Calendar配合

    点赞 评论

相关推荐