检查DAY_OF_WEEK是否在星期一到星期五之间

问题描述 投票:0回答:6

我正在尝试创建一种方法来检查“今天”是否在星期一和星期五之间。为此,我用这条线

'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;
                }
java android error-handling calendar dayofweek
6个回答
58
投票

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

Java 保证(在 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));

在此之后,当且仅当从

isWeekday
开始的那一天是周一到周五(包括周一和周五)时,
myDate
才为真。


6
投票

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
的值。


4
投票

我认为这应该对你有用。

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

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

1
投票

First Calendar.DAY_OF_WEEK 是一个整数字段,它总是为您提供 7。您需要创建一个 Calendar 实例,例如 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");
     }

您可以将这个逻辑应用于您的问题!!


0
投票

java.time

2014 年 3 月,Java 8 引入了现代的

java.time
日期时间 API,取代了容易出错的遗留
java.util
日期时间 API。任何新代码都应使用
java.time
API。如果您收到
java.util.Date
的实例,请使用
java.time.Instant
 将其转换为 
Date#toInstant
,并根据您的要求从中派生
java.time
的其他日期时间类。

LocalDate#getDayOfWeek
返回给定
enum
LocalDate
常量。您可以使用这个常数进行比较。

演示:

public class Main {
    public static void main(String[] args) {
        // ZoneId.systemDefault() gives you the ZoneId set to the JVM.
        // Change it as per your requirement e.g. ZoneId.of("Europe/London")
        LocalDate today = LocalDate.now(ZoneId.systemDefault());

        DayOfWeek dow = today.getDayOfWeek();

        if (!(dow.equals(DayOfWeek.SATURDAY) || dow.equals(DayOfWeek.SUNDAY))) {
            System.out.println(dow);
            // Rest of the processing
        } else {
            System.out.println("Weekend");
            // Rest of the processing
        }
    }
}

在线演示

Trail:日期时间了解有关现代日期时间 API 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.