오전 7시 45 분에 모닝콜 시간을 갖습니다. 주어진 시간대로 이전 인스턴트 받기
LocalTime wakeUpTime = LocalTime.of(7, 45);
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime todaysWakeUpTime = now.with(wakeUpTime);
ZonedDateTime lastWakeUpTime;
if(todaysWakeUpTime.isAfter(now)){
// e.g. it is now 4:30, so wake-up is still to come,
// return the one from yesterday
lastWakeUpTime = todaysWakeUpTime.minusDays(1);
} else {
// e.g. it is now 11:30, so wake-up for today is already past
lastWakeUpTime = todaysWakeUpTime;
}
System.out.println(lastWakeUpTime);
는 청소기 버전이 있습니다 :이 현지 시간 (. 즉, 이전의 웨이크 업 시간)
나는이 작업을 수행 할 수 있습니다 알고 때 내 코드는 시간에 이전의 순간을 반환하려면 , 예. 시간 조정자를 사용하여 의도를 더 잘 전달합니다 (이 시간의 마지막 시간을 얻음)?
public static TemporalAdjuster previousTime(LocalTime time) {
return temporal -> {
// logic to find the previous occurrence of the time
};
}
결정을 필요로 논리를 구현 :
LocalTime wakeUpTime = LocalTime.of(7, 45);
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime lastWakeUpTime = now.with(previousTime(wakeUpTime));
어딘가에 당신이 adjsuter를 구현하는 정적 메소드를 작성해야합니다
기능을 내장하여 당신이 필요가 없습니다 낳게 될 것이다 가장 깨끗한 방법 너 자신 전체 코드를 작성하십시오. 물론 조정자를 작성하여 재사용 할 수는 있습니다 (그러나 일시적 조정자가 포함 된 클래스/메소드의 이름을주의하십시오. 그렇지 않으면이 문제점이 모든 정적 도우미 클래스/도구에 내재되어 있기 때문에 다시 찾을 때 어려움을 겪을 수 있습니다) . 사이드 노트 : 내 시간 라이브러리 Time4J는 이미이 기능을 상자에서 지원합니다 (컴파일 타임 typesafety 포함). [요지보기] (https://gist.github.com/MenoData/4384d9a6d2209a6c5ac8ca4f0cc69bb7) –