Date Time API

Date Time API

날짜와 시간을 다루는 문제는 자바에서 오래된 골칫거리였어요. java.util.Datejava.util.Calendar처럼 예전부터 쓰던 클래스들이 불편해서, 자바 8부터는 java.time 패키지에 날짜, 시간, 인스턴트, 기간(Duration)을 지원하는 클래스들을 새로 담은 Date Time API가 제공되고 있어요. 이 섹션은 그 새 API를 처음부터 차근차근 소개해요.

출처: dev.java

본문

java.time 패키지에 담긴 Date Time API는 날짜, 시간, 인스턴트, 그리고 기간(Duration)을 나타내는 클래스들을 제공해요. 어떤 주제들이 있는지 큰 그림부터 살펴볼게요.

  • Date Time API 개요 — Date Time API와 핵심 개념에 대한 개요예요.
  • 표준 달력(Standard Calendar) — 사람의 시간(human time)과 기계의 시간(machine time) 개념을 비교하고, java.time 패키지의 주요 시간 기반 클래스들의 표를 제공해요.
  • DayOfWeek와 Month 열거형DayOfWeek 열거형과 Month 열거형은 요일과 월을 다뤄요.
  • 날짜(Date)LocalDate, YearMonth, MonthDay, Year 클래스는 시간이나 시간대 없이 날짜만 다뤄요.
  • 날짜와 시간(Date and Time)LocalTimeLocalDateTime 클래스는 각각 시간, 그리고 날짜와 시간을 다루는데, 시간대는 없어요.
  • 시간대와 오프셋(Time Zone and Offset)ZonedDateTime, OffsetDateTime, OffsetTime 클래스는 시간대(또는 시간대 오프셋) 정보를 저장하는 시간 기반 클래스예요. ZoneId, ZoneRules, ZoneOffset 클래스는 이들을 돕는 보조 클래스예요.
  • InstantInstant 클래스는 타임라인 위의 한 순간을 나타내요.
  • 파싱과 포맷팅(Parsing and Formatting) — 날짜와 시간 값을 포맷하고 파싱하는 방법.
  • Temporal 패키지 — temporal adjuster로 조정된 시간 값을 구하고, temporal query를 수행하는 방법.
  • Period와 DurationPeriod 클래스와 Duration 클래스, 그리고 ChronoUnit.between() 메서드로 시간의 양을 계산하는 방법.
  • ClockClock 클래스에 대한 간략한 개요예요. 시스템 시계 대신 대체 시계를 제공할 때 이 클래스를 사용할 수 있어요.
  • 비-ISO 날짜 변환(Non-ISO Date Conversion) — ISO 달력 체계의 날짜를 JapaneseDateThaiBuddhistDate 같은 비-ISO 달력 체계의 날짜로 변환하는 방법.
  • 레거시 Date-Time 코드 — 예전 java.util.Datejava.util.Calendar 코드를 Date Time API로 변환하는 팁.

각 주제는 서로 독립적이라서, 지금 필요한 부분만 골라 보기에도 좋아요. 처음이라면 개요부터 시작해 인스턴트, 파싱·포맷팅 순으로 익숙해지면 자연스럽게 이어져요.

더 알아보기 (Learn more)

날짜·시간을 처음 다룬다면 Date Time API 개요에서 핵심 개념을 잡은 뒤 Standard Calendar를 보는 걸 권해요. 날짜만 필요한 경우는 Date를, 시간대까지 고려해야 하는 애플리케이션이라면 Time Zone and Offset을 중심으로 파고들면 돼요. 각 항목의 세부 내용은 위 목록의 개별 섹션에서 다뤄져요.