检查 DAY_OF_WEEK 是不是在星期一和星期五之间

Posted

技术标签:

【中文标题】检查 DAY_OF_WEEK 是不是在星期一和星期五之间【英文标题】:Check if DAY_OF_WEEK is between Monday and Friday检查 DAY_OF_WEEK 是否在星期一和星期五之间 【发布时间】:2012-04-24 11:35:55 【问题描述】:

我正在尝试创建一个方法来检查“今天”是否在星期一和星期五之间。为此,我得到了这条线'int day = Calendar.DAY_OF_WEEK;' 实际的一天。之后,我用日期(星期一、星期二、星期三、星期四和星期五)填充 ArrayList。现在,当我检查实际日期是否在我的 ArrayList 中时,我设置了boolean DAY = true,否则我设置了boolean DAY = false。我今天和昨天都尝试了该方法,但它总是将布尔值设置为 false。

我需要更改哪些代码才能使我的代码正常工作?您可以在此处找到代码。

代码

                int day = Calendar.DAY_OF_WEEK;
                ArrayList<Integer> daylist = new ArrayList<Integer>();
                daylist.add(Calendar.MONDAY);
                daylist.add(Calendar.TUESDAY);
                daylist.add(Calendar.WEDNESDAY);
                daylist.add(Calendar.THURSDAY);
                daylist.add(Calendar.FRIDAY);

                if (daylist.contains(day))
                    DAY = true;
                else
                    DAY = false;
                

【问题讨论】:

为什么不能只检查日期是否介于 Calendar.MONDAY(value 2) 和 Calendar.FRIDAY(value 6) 之间? DAY_OF_WEEK,必须是这 5 天之一 不,因为你必须要 Calendar.get(Calendar.DAY_OF_WEEK); 【参考方案1】:

哇,这就像试图用热核弹头杀死蚊子 :-)

Java guarantees (in 1.5)(至少到 1.8 不变)SUNDAYSATURDAY 的值是连续的(1 到 7),因此检查范围很简单。

但是,DAY_OF_WEEK 不是星期几,它是一个字段编号(值为 7),要传递给 getter 以检索星期几一周中的。 Calendar.DAY_OF_WEEK 本身与实际日期匹配的唯一时间是星期六。

你可以使用如下代码:

Calendar myDate = Calendar.getInstance(); // set this up however you need it.
int dow = myDate.get (Calendar.DAY_OF_WEEK);
boolean isWeekday = ((dow >= Calendar.MONDAY) && (dow <= Calendar.FRIDAY));

在此之后,当且仅当myDate 的这一天是周一到周五(包括周一到周五),isWeekday 才会为真。

【讨论】:

为什么从 1 开始?它应该从 0 开始。这使得使用 while((today = ++today % 7) != startingPoint 之类的表达式更加尴尬 @likejiujitsu:我怀疑它从一个开始,因为除了超级书呆子之外没有人会使用短语"zeroth day of the week"。从栅栏的 other 一边想一想,我们这些可怜的 C 编码人员在输出日期时必须不断地添加一个 tm_mon :-) 在你的情况下这样做很容易 while ((today = (today % 7) + 1) != startingPoint)但是,是的,您必须考虑一下。 大声笑“这就像试图用热核弹头杀死一只蚊子”,经典。【参考方案2】:
int day = Calendar.DAY_OF_WEEK;

这里的逻辑被打破了。 DAY_OF_WEEK 是一个常量,用于标识我们需要从 Calendar 实例中检索哪种类型的数据。

解决您的问题的最简单方法(因为 Calendar.FRIDAY > ... > Calendar.MONDAY)是

Calendar now = Calendar.getInstance();
int day = now.get(Calendar.DAY_OF_WEEK);
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY)
  // do something

【讨论】:

【参考方案3】:

第一个 Calendar.DAY_OF_WEEK 是一个整数字段,将始终为您提供 7。您需要创建一个日历实例,例如 Calendar cal = Calendar.getInstance();默认情况下,它会为您提供当前时区的当前日期。 然后你可以调用 cal.get(Calendar.DAY_OF_WEEK);这会给你周日和周六之间的任何一天

现在你可以检查这样的东西

    if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) 
         System.out.println("Weekend");
      else 
        System.out.println("Weekday");
     

你可以把这个逻辑应用到你的问题上!!

【讨论】:

【参考方案4】:

我认为这应该对你有用。

int day = cal.get(Calendar.DAY_OF_WEEK);
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY)
    DAY = true;
else
    DAY = false;

【讨论】:

【参考方案5】:

int day = Calendar.DAY_OF_WEEK; 应该改为

Calendar cal; // The calendar object
....your other code for getting the date goes here....
int day = cal.get(Calendar.DAY_OF_WEEK);

您当前的代码只是获取常量Calendar.DAY_OF_WEEK 的值。

【讨论】:

正确!如果您想让它正常工作,这一点很重要!

以上是关于检查 DAY_OF_WEEK 是不是在星期一和星期五之间的主要内容,如果未能解决你的问题,请参考以下文章

Android Calendar.set方法,设置星期几

prometheus过滤范围矢量由day_of_week

java运算,今天是星期二,100天以后是星期几

获取星期几,周一到周日,返回1-7

java 获取当前日期是多少周

Java的Calendar类中的常量DAY_OF_WEEK和DAY_OF_WEEK_IN_MONTH有啥区别?