JDK 8 의 Duration Period 와 ChronoUnit 에 대해 서 말씀 드 리 겠 습 니 다.
4455 단어 JDKDurationPeriodChronoUnit
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.ChronoUnitChronoUnit 은 시간 단 위 를 표시 하 는 데 사용 되 지만 매우 유용 한 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 에 대한 자 료 는 저희 의 다른 관련 글 을 주목 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java】 STS (Eclipse)에 AdoptOpen JDK 설정· Eclipse를 2020-09로 업데이트하면 jre로 Eclipse를 움직이고 있습니다! 라는 메시지가 나온다. ・메모리 상태의 파악을 위해 MissionControl 넣으려고 하면 JDK로 움직이지 않으면 안 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.