没有任何现有线程帮助我理解为什么我在主方法(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为工作日(假)
发布于 2016-11-26 16:04:58
有两件事:
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);发布于 2016-11-26 16:12:37
我建议不要使用遗留的Calendar和Date类。在Java8中,有一个名为java.time的新包,它有更好的类来处理日期。
在您的示例中,因为它只是一个日期(没有时间),所以java.time.LocalDate适合您的用例。检查一周中的几天是很简单的方法,它还会尝试几个月,使一月= 1。
https://stackoverflow.com/questions/40820202
复制相似问题