运行下面一段代码:
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
问题解决