【问题标题】: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);

标签: java android error-handling calendar dayofweek


【解决方案1】:

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

Java guarantees (in 1.5)(至少到 1.8 不变)SUNDAY 到 SATURDAY 的值是连续的(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 的值。

        【讨论】:

        • 正确!如果您想让它正常工作,这一点很重要!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 2018-07-15
        • 2015-09-11
        • 2016-10-24
        • 2011-06-25
        相关资源
        最近更新 更多