다음 문제로 고생하고 있습니다.
내 앱에서 현재 날짜 시간 LocalDateTime.now()
이 특정 요일 범위 내에 있는지 확인하고 싶습니다 . 금요일 과 일요일 사이에 있다고 가정 합니다.
예:
Datetime 창은 금요일 20:00 부터 일요일 20:00까지 입니다. 나는에 현재 날짜를 확인하면 목요일 에 22 : 00 *를, 대답은해야 false
하지만 ** 토요일에 검사시 에서 8시 , 대답은해야한다 true
.
메서드를 사용 하고 시간과 분을 별도로 비교하는 API의 DayOfWeek
클래스 로이 작업을 수행 할 수 있지만 더 나은 방법이 있는지, 특히 날짜 범위가 2 주 (예 : 금요일 부터 월요일까지) 에 걸쳐 있는지 알고 싶습니다. 다음 주)?java.time
compareTo()
조언이나 도움에 미리 감사드립니다.
a LocalDateTime
를 DayOfWeek
+ LocalTime
와 비교 하거나 두 DayOfWeek
+ LocalTime
쌍 사이에 있는지 확인 하고 싶기 때문에 도우미 클래스가 좋을 수 있습니다.
public final class DayOfWeekTimeRange {
private final DayOfWeek fromDay;
private final LocalTime fromTime;
private final DayOfWeek toDay;
private final LocalTime toTime;
private final boolean inverted;
public DayOfWeekTimeRange(DayOfWeek fromDay, LocalTime fromTime, DayOfWeek toDay, LocalTime toTime) {
this.fromDay = fromDay;
this.fromTime = fromTime;
this.toDay = toDay;
this.toTime = toTime;
this.inverted = compare(this.fromDay, this.fromTime, this.toDay, this.toTime) > 0;
}
public boolean inRange(LocalDateTime dateTime) {
return inRange(dateTime.getDayOfWeek(), dateTime.toLocalTime());
}
public boolean inRange(DayOfWeek day, LocalTime time) {
boolean fromOk = compare(day, time, this.fromDay, this.fromTime) >= 0; // Lower-inclusive
boolean toOk = compare(day, time, this.toDay , this.toTime ) < 0; // Upper-exclusive
return (this.inverted ? fromOk || toOk : fromOk && toOk);
}
private static int compare(DayOfWeek day1, LocalTime time1, DayOfWeek day2, LocalTime time2) {
int cmp = day1.compareTo(day2);
if (cmp == 0)
cmp = time1.compareTo(time2);
return cmp;
}
}
테스트
// Fri 10:00 PM to Sun 10:00 PM
DayOfWeekTimeRange range = new DayOfWeekTimeRange(DayOfWeek.FRIDAY, LocalTime.of(20,0), DayOfWeek.SUNDAY, LocalTime.of(20,0));
System.out.println(range.inRange(LocalDateTime.of(2015, 11, 12, 22, 0))); // Thu Nov. 12 2015 at 10:00 PM
System.out.println(range.inRange(LocalDateTime.of(2015, 11, 14, 8, 0))); // Sat Nov. 14 2015 at 8:00 AM
System.out.println(range.inRange(LocalDateTime.of(2015, 11, 16, 15, 0))); // Mon Nov. 16 2015 at 3:00 PM
// Fri 10:00 PM to Mon 10:00 PM
range = new DayOfWeekTimeRange(DayOfWeek.FRIDAY, LocalTime.of(20,0), DayOfWeek.MONDAY, LocalTime.of(20,0));
System.out.println(range.inRange(LocalDateTime.of(2015, 11, 12, 22, 0))); // Thu Nov. 12 2015 at 10:00 PM
System.out.println(range.inRange(LocalDateTime.of(2015, 11, 14, 8, 0))); // Sat Nov. 14 2015 at 8:00 AM
System.out.println(range.inRange(LocalDateTime.of(2015, 11, 16, 15, 0))); // Mon Nov. 16 2015 at 3:00 PM
산출
false
true
false
false
true
true
대안
물론 DayOfWeek
+를 사용 하여 많은 처리를 수행하는 경우 두 가지를 결합 LocalTime
하여 자신의 LocalDayOfWeekTime
클래스를 구현하는 것을 고려해야 합니다. 같은 방식 LocalDateTime
으로 단순히 결합 된 LocalDate
+ LocalTime
(즉, 직접 확인)입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다