使用带有 Calendar 实例的 isWeekEnd 方法的布尔结果不正确
Incorrect boolean outcome using isWeekEnd method with Calendar instance
None 的现有线程帮助我理解了为什么我在主方法中输入的日期(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 显示为周末 (true),但将 2016、27、11 显示为工作日 (false)
两件事:
语句c1.set(2016, 25, 11);
实际上将日期设置为2018年2月11日(星期日),因为25 = 2×12 + 1,所以年份增加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);
我建议不要使用旧版 Calendar
和 Date
类。在 Java 8 中,有一个名为 java.time
的新包,它有更好的 类 来处理日期。
对于您的情况,因为它只是一个日期(没有时间),所以 java.time.LocalDate
适合您的用例。检查星期几的好简单方法,它还尝试几个月,以便一月 = 1。
None 的现有线程帮助我理解了为什么我在主方法中输入的日期(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 显示为周末 (true),但将 2016、27、11 显示为工作日 (false)
两件事:
语句c1.set(2016, 25, 11);
实际上将日期设置为2018年2月11日(星期日),因为25 = 2×12 + 1,所以年份增加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);
我建议不要使用旧版 Calendar
和 Date
类。在 Java 8 中,有一个名为 java.time
的新包,它有更好的 类 来处理日期。
对于您的情况,因为它只是一个日期(没有时间),所以 java.time.LocalDate
适合您的用例。检查星期几的好简单方法,它还尝试几个月,以便一月 = 1。