检查 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 不变)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
的值。
【讨论】:
正确!如果您想让它正常工作,这一点很重要!以上是关于检查 DAY_OF_WEEK 是不是在星期一和星期五之间的主要内容,如果未能解决你的问题,请参考以下文章