Android - 判断LocalTime是否在一组时间之间(包括午夜过后和午夜后)
Android - Determining whether LocalTime is between a set of time (including past midnight and after midnight)
目前我正在尝试找出某个时间是否在 startTime-1 小时和 endTime 之间。
目前我的代码是:
if (localTimeNow.isAfter(startShift.minus(1, ChronoUnit.HOURS)) &&
localTimeNow.isBefore(endShift)) {
Toast.makeText(this, "In shift", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Not in shift", Toast.LENGTH_SHORT).show();
}
如果 startShift
位于 08:00 且 endShift
位于 16:00,这会很好用,但是当我将 startShift
在 22:00 和 endShift
在 06:00。
对这里的逻辑有什么建议吗?
Post将此作为建议的答案。这是午夜问题的解决方案,即使间隔跨越午夜,它也能按预期工作。
/**
* Takes into consideration that the interval may span accross midnight
*
* @param clock to make unit testing easier, just replace for Clock.systemUTC() in your code
* @param start the interval start
* @param end the interval end
* @return true if "now" is inside the specified interval
*/
static boolean isNowBetweenLocalTime(Clock clock, final LocalTime start, final LocalTime end) {
LocalTime now = LocalTime.now(clock);
// if interval crosses midnight
if (end.isBefore(start)) {
if (now.isAfter(start) && now.isAfter(end)) {
return true;
}
if (now.isBefore(start) && now.isBefore(end)) {
return true;
}
return false;
}
// if interval does not cross midnight
if (end.isAfter(start)) {
if (now.isAfter(start) && now.isBefore(end)) {
return true;
}
return false;
}
return false; // interval is 0 so start and end always outside interval
}
原始 Post -
目前我正在尝试找出某个时间是否在 startTime-1 小时和 endTime 之间。
目前我的代码是:
if (localTimeNow.isAfter(startShift.minus(1, ChronoUnit.HOURS)) &&
localTimeNow.isBefore(endShift)) {
Toast.makeText(this, "In shift", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Not in shift", Toast.LENGTH_SHORT).show();
}
如果 startShift
位于 08:00 且 endShift
位于 16:00,这会很好用,但是当我将 startShift
在 22:00 和 endShift
在 06:00。
对这里的逻辑有什么建议吗?
Post将此作为建议的答案。这是午夜问题的解决方案,即使间隔跨越午夜,它也能按预期工作。
/**
* Takes into consideration that the interval may span accross midnight
*
* @param clock to make unit testing easier, just replace for Clock.systemUTC() in your code
* @param start the interval start
* @param end the interval end
* @return true if "now" is inside the specified interval
*/
static boolean isNowBetweenLocalTime(Clock clock, final LocalTime start, final LocalTime end) {
LocalTime now = LocalTime.now(clock);
// if interval crosses midnight
if (end.isBefore(start)) {
if (now.isAfter(start) && now.isAfter(end)) {
return true;
}
if (now.isBefore(start) && now.isBefore(end)) {
return true;
}
return false;
}
// if interval does not cross midnight
if (end.isAfter(start)) {
if (now.isAfter(start) && now.isBefore(end)) {
return true;
}
return false;
}
return false; // interval is 0 so start and end always outside interval
}
原始 Post -