使用Calendar对象的坑

运行下面一段代码:

public class CalendarTest {
    public static void main(String[] args) {
        // 当前时间为 2018-11-29
        Calendar calendar = Calendar.getInstance();

        // 设置到2017年2月
        calendar.set(Calendar.YEAR, 2017);
        calendar.set(Calendar.MONTH, 1);
        int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
        int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        int year = calendar.get(Calendar.YEAR);
        System.out.println("现在是:"+year+"年");
        System.out.println(2 + "月第一天是:" + firstDay);
        System.out.println(2 + "月最后一天是:" + lastDay);
    }
}

粗看,结果可能很明显,2017年2月28

实际结果是:

现在是:2017年
2月第一天是:1
2月最后一天是:31

这是因为实例化calendar对象后,设置日期,在获取月份的最后时,用的还是之前的2018-11-29那个对象

为了解决这个问题,实例化后必须先清空缓存

public class CalendarTest {
    public static void main(String[] args) {
        // 当前时间为 2018-11-29
        Calendar calendar = Calendar.getInstance();
        // 加上这句代码
        calendar.clear();
        // 设置到2017年2月
        calendar.set(Calendar.YEAR, 2017);
        calendar.set(Calendar.MONTH, 1);

        int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
        int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println(2 + "月第一天是:" + firstDay);
        System.out.println(2 + "月最后一天是:" + lastDay);
    }
}

运行结果:

2月第一天是:1
2月最后一天是:28

问题解决 

猜你喜欢

转载自blog.csdn.net/qq_41907991/article/details/84628120