BE/Java

chronounit

baek-dev 2025. 5. 24. 11:47

ChronoUnit 은 Java 8부터 도입된 날짜/시간 계산을 위한 열거형(enum) 클래스로, java.time 패키지에서 TemporalUnit 인터페이스를 구현함.


ChronoUnit – 자바 날짜/시간 연산 단위 Enum

ChronoUnit 은 Java 8의 java.time 패키지에 포함된 Enum으로,
기간(Duration) 또는 날짜 간 차이(Period) 를 연산할 때 사용하는 시간 단위(HOURS, DAYS, MONTHS 등)를 명확하게 표현하는 도구임.


1. ChronoUnit 주요 목적

  • LocalDate, LocalDateTime, ZonedDateTime 등과 함께 사용하여
    날짜 간 차이 계산 또는 특정 단위만큼 덧셈/뺄셈 연산에 활용됨
  • 코드의 가독성과 명확성 향상

2. 사용 가능한 시간 단위

ChronoUnit 은 아래와 같이 다양한 시간 단위를 제공함:

 

단위 설명
NANOS 나노초
MICROS 마이크로초
MILLIS 밀리초
SECONDS
MINUTES
HOURS
HALF_DAYS 12시간 단위
DAYS
WEEKS
MONTHS
YEARS
DECADES 10년
CENTURIES 100년
MILLENNIA 1000년
ERAS 시대 단위 (BC/AD 등)
FOREVER 무한 시간 (비교용)

3. 주요 메서드 사용 예시

① 날짜 사이의 차이 계산 (between)

LocalDate start = LocalDate.of(2023, 1, 1);
LocalDate end = LocalDate.of(2025, 5, 1);

long days = ChronoUnit.DAYS.between(start, end); // 851일
long months = ChronoUnit.MONTHS.between(start, end); // 28개월

② 날짜 덧셈 (plus)

LocalDate today = LocalDate.now();
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);

③ 날짜 뺄셈 (minus)

LocalDate yesterday = LocalDate.now().minus(1, ChronoUnit.DAYS);

4. 실무 활용 예시

사례 설명
유저 가입일 기준 구독 남은 기간 계산 DAYS.between(가입일, 현재일)
예약 시간 30분 전 알림 전송 minus(30, ChronoUnit.MINUTES)
유효기간 계산 (1개월 뒤) plus(1, ChronoUnit.MONTHS)
날짜 차이를 단위별로 계산 YEARS.between(a, b), MONTHS.between(a, b) 등

5. ChronoUnit vs ChronoField

항목 ChronoUnit ChronoField
역할 날짜/시간 단위 연산용 날짜/시간 필드 접근용
DAYS, WEEKS, YEARS YEAR, MONTH_OF_YEAR, DAY_OF_MONTH
메서드 between(), addTo() getFrom(), adjustInto()

쉽게 말해, ChronoUnit 은 얼마만큼(add, between) 을 의미하고
ChronoField 는 무엇을(year, month 등 필드) 를 의미함


정리

ChronoUnit 은 Java 8+ 날짜/시간 API에서 시간 단위를 표현하고, 그 단위로 연산하기 위한 Enum임.
between(), plus(), minus() 등과 함께 쓰이며, 기간 계산, 시간 덧셈/뺄셈 등에 유용함.
직관적인 코드 작성이 가능하고, 다양한 시간 단위를 지원하므로 실무에서 매우 자주 사용됨.

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

temporalAdjusters  (0) 2025.05.26
chronofield  (0) 2025.05.25
BiConsumer  (0) 2025.05.18
[Java] ArrayDeque  (0) 2025.04.02
[Java] 비동기 처리 (try-catch)  (0) 2025.03.28