我正在尝试创建一种方法来检查“今天”是否在星期一和星期五之间。为此,我用这条线
'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 保证(在 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
才为真。
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
的值。
我认为这应该对你有用。
int day = cal.get(Calendar.DAY_OF_WEEK);
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY){
DAY = true;
}else{
DAY = false;
}
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
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");
}
您可以将这个逻辑应用于您的问题!!
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 的更多信息。