首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带日历实例的isWeekEnd方法的不正确布尔结果

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

Stack Overflow用户
提问于 2016-11-26 16:00:56
回答 2查看 117关注 0票数 0

没有任何现有线程帮助我理解为什么我在主方法(2016、25、11)中输入的日期(即星期五)对于我的方法isWeekend()来说是正确的。我在其他线程中见过人们谈论将日历的第一天设置为星期一,但我不认为这会改变我的结果

代码语言:javascript
复制
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为工作日(假)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-26 16:04:58

有两件事:

  1. 日历类适用于基于0的月份:一月= 0,二月= 1,等等。
  2. 设置方法按该顺序获取年份、月份和日期,而不是年份、日期和月份。

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,并交换第二个和第三个参数:

代码语言:javascript
复制
c1.set(2016, 10, 25); // Friday, November 25, 2016

如果您正在对日期进行硬编码,您还可以使用静态常量来提高清晰度:

代码语言:javascript
复制
c1.set(2016, Calendar.NOVEMBER, 25);
票数 3
EN

Stack Overflow用户

发布于 2016-11-26 16:12:37

我建议不要使用遗留的CalendarDate类。在Java8中,有一个名为java.time的新包,它有更好的类来处理日期。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40820202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档