现有的线程都没有帮助我理解为什么我在主方法(2016,25,11)中输入的日期是星期五,因为我的方法isWeekend()正在弹出。我在其他线索中看到人们谈论将日历的第一天设置为星期一,但我不知道这会如何改变我的结果
public static boolean isWeekend(Calendar userDate){
if (userDate.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
userDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
return true;
else return false;
}
public static void main(String[] args) {
Calendar c1 = Calendar.getInstance();
c1.set(2016, 25, 11);
System.out.println(CalendarBankHoliday.isWeekend(c1));
}
请有人帮我理解这个
编辑:它正确显示2016,26,11为周末(真实)但2016年,27,11为工作日(虚假)
答案 0 :(得分:3)
两件事:
声明c1.set(2016, 25, 11);
实际上将日期设置为2018年2月11日(星期日),因为25 = 2×12 + 1,因此年份增加2,月份设置为2月。同样,声明c1.set(2016, 26, 11);
实际上将日期设置为2018年3月11日(也是星期日)。
要将c1
设置为2016年11月25日,请将11更改为10,然后交换第二个和第三个参数:
c1.set(2016, 10, 25); // Friday, November 25, 2016
如果你对日期进行硬编码,你也可以使用静态常量来清晰:
c1.set(2016, Calendar.NOVEMBER, 25);
答案 1 :(得分:2)
我建议不要使用旧版Calendar
和Date
类。在Java 8中,有一个名为java.time
的新包,它有更好的类来处理日期。
在您的情况下,因为它只是一个日期(没有时间),java.time.LocalDate
适合您的用例。很简单的方法来检查一周中的几天,它也会尝试几个月,以便1月= 1。