2016-10-06 4 views
1

나는 java8 time API로 새롭다. 불쌍한 처방을 용서해 준다.다음 일치하는 항목 즉시

내가 원하는 것은 다음 기준 (타임 스탬프에서 시작)에 특정 기준이 충족되고 만나는 시점을 파악하는 것입니다.

예를 들어 밀리 초 타임 스탬프가 있고 주어진 시간대에서 금요일 인 다음 타임 스탬프가 무엇인지 파악하고 싶다고 가정 해 보겠습니다.

금요일이 언제 끝나는 지 알아야합니다. 시작으로 예. 금요일 오후 4시 20 분이면 (그게 시간 인 경우) 시작 + 단위 길이가 충분하지 않습니다.

Obv이 일을하는 더러운 방법이 많이 있지만, 나는 우아한 java8-esque 솔루션을 찾고 있습니다. 내가 직면하고있는 실제 문제는 이보다 조금 더 복잡하지만, 금요일 예제를 해결하면 나에게 앞으로 나아갈 수있는 단서가 생겼다.

답변

2

Instant은 신기원 이래로 밀리 초 수이므로 "날짜", "시간"또는 "요일"과 같은 개념을 실제로 지원하지 않으므로 먼저 ZonedDateTime을 사용하려고합니다.

실제로 "find date matching criteria"에 대한 유틸리티가 없습니다 - afaik, 당신 스스로해야 할 것입니다. `;

final Instant startVal = Instant.now(); 
final ZonedDateTime date = startVal.atZone(ZoneOffset.UTC); // or whatever 
final int daysUntilFriday = (DayOfWeek.FRIDAY.getValue() - date.getDayOfWeek().getValue() + 7) % 7; // +7 to avoid a negative value 
final ZonedDateTime startOfNextFriday = date.plusDays(daysUntilFriday).truncatedTo(ChronoUnit.DAYS); 
final ZonedDateTime endOfNextFriday = ZonedDateTime.of(startOfNextFriday.toLocalDate(), LocalTime.MAX, startOfNextFriday.getZone()); 
+1

대신 추가 할 일 계산, 당신은 ZonedDateTime sameTimeOnNextFriday = date.with (TemporalAdjusters.nextOrSame (DayOfWeek.FRIDAY))'사용할 수 있습니다 – assylias