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 |