- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Java 检查当前日期和时间是否在周五 17:42 到周日 17:42 之间。
目前我正在使用非常非常糟糕的代码块来执行此操作。这是一个紧急的解决方案。现在我正在重构,但在 joda 等中找不到任何方法。
有什么想法吗?谢谢
private final Calendar currentDate = Calendar.getInstance();
private final int day = currentDate.get(Calendar.DAY_OF_WEEK);
private final int hour = currentDate.get(Calendar.HOUR_OF_DAY);
private final int minute = currentDate.get(Calendar.MINUTE);
if (day != 1 && day != 6 && day != 7) {
if (combined != 0) {
return badge == 1;
} else {
return badge == product;
}
} else {
if (day == 6 && hour > 16) {
if (hour == 17 && minute < 43) {
if (combined != 0) {
return badge == 1;
} else {
return badge == product;
}
} else {
return badge == 0;
}
} else if (day == 6 && hour < 17) {
if (combined != 0) {
return badge == 1;
} else {
return badge == product;
}
} else if (day == 1 && hour > 16) {
if (hour == 17 && minute < 43) {
return badge == 0;
} else {
if (combined != 0) {
return badge == 1;
} else {
return badge == product;
}
}
} else {
return badge == 0;
}
}
我在 @MadProgrammer 和 @Meno Hochschild 的帮助下使用了这样的解决方案
方法:
public static boolean isBetween(LocalDateTime check, LocalDateTime startTime, LocalDateTime endTime) {
return ((check.equals(startTime) || check.isAfter(startTime)) && (check.equals(endTime) || check.isBefore(endTime))); }
用法:
static LocalDateTime now = LocalDateTime.now();
static LocalDateTime friday = now.with(DayOfWeek.FRIDAY).toLocalDate().atTime(17, 41);
static LocalDateTime sunday = friday.plusDays(2).plusMinutes(1);
if (!isBetween(now, friday, sunday)) { ... }
再次感谢您的努力。
最佳答案
Date
和 Calendar
具有可以对 Date
/Calendar
、 的其他实例进行比较的方法>等于
、之前
和之后
但是,我鼓励使用 Java 8 的新 Time API
public static boolean isBetween(LocalDateTime check, LocalDateTime startTime, LocalDateTime endTime) {
return ((check.equals(startTime) || check.isAfter(startTime)) &&
(check.equals(endTime) || check.isBefore(endTime)));
}
如果提供的 LocalDateTime
位于指定范围内(含),则将返回 true
。
类似...
LocalDateTime start = LocalDateTime.now();
start = start.withDayOfMonth(26).withHour(17).withMinute(42).withSecond(0).withNano(0);
LocalDateTime end = start.plusDays(2);
LocalDateTime check = LocalDateTime.now();
System.out.println(check + " is within range = " + isBetween(check, start, end));
check = start;
System.out.println(check + " is within range = " + isBetween(check, start, end));
check = end;
System.out.println(check + " is within range = " + isBetween(check, start, end));
check = start.plusDays(1);
System.out.println(check + " is within range = " + isBetween(check, start, end));
check = end.plusMinutes(1);
System.out.println(check + " is within range = " + isBetween(check, start, end));
哪些输出
2015-06-25T18:31:32.969 is within range = false
2015-06-26T17:42 is within range = true
2015-06-28T17:42 is within range = true
2015-06-27T17:42 is within range = true
2015-06-28T17:43 is within range = false
Joda-Time 有一个 Interval
类,这使得它更加容易
Interval targetInterval = new Interval(targetStart, targetEnd);
System.out.println("Contains interval = " + interval.contains(targetInterval)
演示here
所以我在回家的路上思考,假设你所拥有的只是你想要检查的日期/时间,你如何确定这一天是否在你的范围内
LocalDateTime now = LocalDateTime.now();
boolean isBetween = false;
switch (now.getDayOfWeek()) {
case FRIDAY:
case SATURDAY:
case SUNDAY:
LocalDateTime lastFriday = getLastFriday(now);
LocalDateTime nextSunday = getNextSunday(now);
isBetween = isBetween(now, lastFriday, nextSunday);
System.out.println(lastFriday + " - " + nextSunday + ": " + end);
break;
}
它的作用是检查dayOfWeek
,看看它是否在所需的范围内,如果在,它会找到上一个星期五
和下一个星期日
从指定日期开始并检查它是否在它们之间(请参阅前面的示例)
lastFriday
和 nextSunday
只需从指定的日期/时间添加/减去day
,直到达到所需的dayOfWeek
code>,然后播种所需的时间限制
public static LocalDateTime getLastFriday(LocalDateTime anchor) {
LocalDateTime ldt = LocalDateTime.from(anchor);
return ldt.with(DayOfWeek.FRIDAY).withHour(17).withMinute(42).withSecond(0).withNano(0);
}
public static LocalDateTime getNextSunday(LocalDateTime anchor) {
LocalDateTime ldt = LocalDateTime.from(anchor);
return ldt.with(DayOfWeek.SUNDAY).withHour(17).withMinute(42).withSecond(0).withNano(0);
}
关于java - 如何确定一周中周五和周日之间特定时间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31044827/
我有一个 JavaScript 函数,可以确定工作日的下一个日期。除周日外,它全天都有效。 For Sunday: Sun May 25 2014 Sun Jun 08 2014 Sun Jun 22
这段代码的作用是打印本周从星期一到星期五的日期。它工作得很好,但我想问点别的:如果今天是周六或周日,我希望它在下周显示。我该怎么做? 这是我目前的工作代码(感谢 StackOverflow!): //
我想找出两个日期(dateStart,dateEnd)之间的差异,仅适用于 MySql 查询中周一至周五的工作日。 这是我的查询,它比较两个日期并在一周或更长时间过去后给出结果: SELECT * F
我有一个代码可以在实际日期上加上 +1 天。 var date = '30 Apr 2010'; var actual_date = new Date(date); var final_date =
我试图显示生日在本周(周一至周日)内的所有用户。在到处搜索后,我得到了这个,但它也显示了上周和本周的用户。 SELECT * FROM teachers WHERE WEEK(birthday, 0)
因此,对于开始日期和结束日期,我想确定这两个日期之间一周中有多少天。 那么有多少个星期一、星期二等 我知道我可以通过在开始日期和结束日期之间循环并每天检查来做到这一点,但差异可能会很大。我更喜欢不需要
为了让我的 child 快乐,我一直在实现 Yellow Car Game PHP 语言用于长途汽车旅行。其中一个人会在我的手机上看到黄色汽车时添加这些汽车。计数器应该增加他们的每个分数,每个周日晚上
我是 matplotlib 的新手,正在尝试按工作日绘制一些数字。现在(见下图),我的 x 轴编号为 0 - 6,0 = 星期一,1 = 星期二等。如何更改 xaxis 代码标签,使其显示 Mon、T
我是一名优秀的程序员,十分优秀!