Java 对日历实例使用isWeekEnd方法的布尔结果不正确

Java 对日历实例使用isWeekEnd方法的布尔结果不正确,java,calendar,boolean,logical-operators,Java,Calendar,Boolean,Logical Operators,现有的线程都没有帮助我理解为什么我在主方法(2016,25,11)中输入的日期(星期五)对于我的方法isWeekend()来说是真的。我在其他线程中看到人们谈论将日历的一周第一天设置为周一,但我不认为这会改变我的结果 public static boolean isWeekend(Calendar userDate){ if (userDate.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || userDate.get(Cale

现有的线程都没有帮助我理解为什么我在主方法(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为基础的月份:一月=0,二月=1,等等
  • 该方法按该顺序取年、月和日,而不是年、日和月
  • 声明
    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);
    
    两件事:

  • 该类使用以0为基础的月份:一月=0,二月=1,等等
  • 该方法按该顺序取年、月和日,而不是年、日和月
  • 声明
    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);
    

    我建议不要使用传统的
    日历
    日期
    类。在Java8中,有一个名为
    Java.time
    的新包,它有更好的类来处理日期


    在您的情况下,因为它只是一个日期(没有时间),所以适合您的用例。非常简单的方法来检查一周中的几天,它还尝试了几个月,以便一月=1。

    我建议不要使用传统的
    日历
    日期
    类。在Java8中,有一个名为
    Java.time
    的新包,它有更好的类来处理日期


    在您的情况下,因为它只是一个日期(没有时间),所以适合您的用例。检查一周中几天的简单方法很好,它还尝试了几个月,以使一月=1。

    是否有任何方法可以编辑它,使一月为1?这就是Calendar类的工作方式。如果您接受用户提供的月份,则在将其传递给
    set
    方法之前减去1。好的,谢谢,只是我有一个预先制作的日历实例列表,其中包含银行假日日期,我想我也必须从这些日历实例的月份中减去1?是的。还请注意,您混淆了月份和日期参数;订单应该是“年、月、日”,而不是“年、日、月”。好的,谢谢你的帮助!是否有必要编辑它,使其成为1月1日?这就是Calendar类的工作方式。如果您接受用户提供的月份,则在将其传递给
    set
    方法之前减去1。好的,谢谢,只是我有一个预先制作的日历实例列表,其中包含银行假日日期,我想我也必须从这些日历实例的月份中减去1?是的。还请注意,您混淆了月份和日期参数;订单应该是“年、月、日”,而不是“年、日、月”。好的,谢谢你的帮助!这根本不是重复的,我的问题的答案与您提供的答案不一样。我要一个布尔值,使用日历静态值,不迭代一周,如果是周六或周日,则跳过它,方法完全不同。它一点也不重复,我的问题的答案与您提供的答案不同。我要求一个布尔值,使用日历静态值,不迭代一周,如果是周六或周日,则跳过它,方法完全不同。