JDK 8 의 Duration Period 와 ChronoUnit 에 대해 서 말씀 드 리 겠 습 니 다.

1.기간
Duration 은 주로 초 단위 와 나 초 단위 의 시간 을 측정 하 는데 사용 되 며,시간 정밀도 가 높 은 경우 에 사용 된다.
먼저 Duration 의 정 의 를 살 펴 보 겠 습 니 다.

public final class Duration
        implements TemporalAmount, Comparable<Duration>, Serializable
Duration 은 final class 이 며 직렬 화 와 비교 가 가능 하 다 는 것 을 알 수 있다.Duration 은 TemporalAmount 인터페이스 도 실현 했다 는 점 에 주목 하고 있다.
그럼 TemporalAmount 인 터 페 이 스 는 무엇 일 까요?
TemporalAmount 은 Duration 과 Period 의 부모 인터페이스 입 니 다.

그것 은 반드시 실현 해 야 할 네 가지 방법 을 정의 했다.

long get(TemporalUnit unit);
List<TemporalUnit> getUnits();
Temporal addTo(Temporal temporal);
Temporal subtractFrom(Temporal temporal);
그 중에서 TemporalUnit 은 시간 대상 의 단 위 를 대표 합 니 다.예 를 들 어 years,months,days,hours,minutes 와 seconds.
Temporal 은 시간 대상 에 대한 읽 기와 쓰기 동작 을 대표 한다.
Duration 의 기본 동작 을 살 펴 보 겠 습 니 다.

Instant start = Instant.parse("2020-08-03T10:15:30.00Z");
Instant end = Instant.parse("2020-08-03T10:16:30.12Z");
Duration duration = Duration.between(start, end);
log.info("{}",duration.getSeconds());
log.info("{}",duration.getNano());
log.info("{}",duration.getUnits());
위 에서 우 리 는 두 개의 인 스 턴 트 를 만 든 다음 에 Duration.between 방법 으로 그들 간 의 차 이 를 추산 했다.
그 중에서 초 부분의 차 이 는 duration.getSeconds()를 사용 하여 얻 을 수 있 으 며,초 이하 정밀도 부분의 차 이 는 duration.getNano()를 사용 하여 얻 을 수 있 습 니 다.
마지막 으로 duration.getUnits()를 사용 하여 duration 이 지원 하 는 TemporalUnit(시간 단위)을 살 펴 보 겠 습 니 다.
실행 결 과 를 보십시오.
INFO com.flydean.time - 60
INFO com.flydean.time - 120000000
INFO com.flydean.time - [Seconds, Nanos]
인 스 턴 스 를 제외 하고 우 리 는 LocalTime 도 사용 할 수 있다.

LocalTime start2 = LocalTime.of(1, 20, 25, 1314);
LocalTime end2 = LocalTime.of(3, 22, 27, 1516);
Duration.between(start2, end2).getSeconds();
저 희 는 Duration 에 대해 plus 와 minus 작업 을 하고 isNegative 를 사용 하여 두 시간의 우선 순 위 를 판단 할 수 있 습 니 다.

duration.plusSeconds(60);
duration.minus(30, ChronoUnit.SECONDS);
log.info("{}",duration.isNegative());
그 밖 에 Duration.of 방법 을 사용 하여 Duration 을 편리 하 게 만 들 수 있 습 니 다.

Duration fromDays = Duration.ofDays(1);
Duration fromMinutes = Duration.ofMinutes(60);
2.기간
Period 의 단 위 는 year,month,day 입 니 다.
조작 은 기본적으로 Duration 과 일치한다.
먼저 정 의 를 보십시오.

public final class Period
        implements ChronoPeriod, Serializable 
그 중에서 ChronoPeriod 는 TemporalAmount 의 하위 인터페이스 입 니 다.
마찬가지 로 Period.between 을 사용 하여 LocalDate 에서 Period 를 구축 할 수 있 습 니 다.

LocalDate startDate = LocalDate.of(2020, 2, 20);
LocalDate endDate = LocalDate.of(2021, 1, 15);

Period period = Period.between(startDate, endDate);
log.info("{}",period.getDays());
log.info("{}",period.getMonths());
log.info("{}",period.getYears());
Period.of 에서 직접 구축 할 수도 있 습 니 다.

Period fromUnits = Period.of(3, 10, 10);
Period fromDays = Period.ofDays(50);
Period fromMonths = Period.ofMonths(5);
Period fromYears = Period.ofYears(10);
Period fromWeeks = Period.ofWeeks(40);
마지막 으로 우 리 는 플러스 나 minus 의 조작 도 사용 할 수 있다.

period.plusDays(50);
period.minusMonths(2);
3.ChronoUnit
ChronoUnit 은 시간 단 위 를 표시 하 는 데 사용 되 지만 매우 유용 한 between 방법 으로 두 시간의 차 이 를 계산 합 니 다.

LocalDate startDate = LocalDate.of(2020, 2, 20);
LocalDate endDate = LocalDate.of(2021, 1, 15);
long years = ChronoUnit.YEARS.between(startDate, endDate);
long months = ChronoUnit.MONTHS.between(startDate, endDate);
long weeks = ChronoUnit.WEEKS.between(startDate, endDate);
long days = ChronoUnit.DAYS.between(startDate, endDate);
long hours = ChronoUnit.HOURS.between(startDate, endDate);
long minutes = ChronoUnit.MINUTES.between(startDate, endDate);
long seconds = ChronoUnit.SECONDS.between(startDate, endDate);
long milis = ChronoUnit.MILLIS.between(startDate, endDate);
long nano = ChronoUnit.NANOS.between(startDate, endDate);
이상 은 바로 JDK 8 의 Duration Period 와 ChronoUnit 에 대한 상세 한 내용 입 니 다.더 많은 JDK 8 Duration Period 와 ChronoUnit 에 대한 자 료 는 저희 의 다른 관련 글 을 주목 해 주세요!

좋은 웹페이지 즐겨찾기