
java.time 패키지는 JDK 8부터 도입된 새로운 날짜와 시간 라이브러리로, 기존의 java.util.Date와 java.util.Calendar의 문제점을 해결하기 위해 설계되었습니다. 이번 개요에서는 java.time 패키지에 대해 간략하게만 소개합니다. 세부 사항들은 따로 포스팅으로 자세히 다룰 예정입니다.
java.time 패키지는 더 정확하고 사용하기 쉬운 날짜와 시간 관리를 가능하게 하는 다양한 클래스와 메서드를 제공합니다. java.time 패키지는 다양한 Class와 Enum을 제공하여 다양한 용도에 맞는 날짜 및 시간 처리를 지원합니다.
DayOfWeek, MonthChronoUnit, ChronoFieldLocalDate, LocalTime, LocalDateTimeZonedDateTime, OffsetDateTime, InstantPeriod, DurationTemporalAdjusters, DateTimeFormatterZoneId, ZoneOffsetYear, Month, YearMonth, MonthDay, DayOfWeekDayOfWeek를 제외하곤 많이 쓰이진 않습니다. (다른 클래스의 메서드들로 충분히 대체가 되기 때문입니다)LocalDate, LocalTime, LocalDateTimeLocalDate는 날짜(연, 월, 일, etc.)LocalTime은 시간(시, 분, 초, 나노초, etc.)LocalDateTime은 날짜와 시간을 함께 표현합니다.OffsetDateTime, ZonedDateTime, InstantOffsetDateTime은 시간대 오프셋을 포함한 날짜와 시간을 다룹니다.ZonedDateTime은 시간대 정보를 포함한 날짜와 시간을 다룹니다. Instant는 기준타임라인(1970-01-01 0시0분0초)으로부터의 특정 순간을 초 정밀도로 표현합니다.Period, DurationPeriod는 연, 월, 일 단위의 기간을 표현합니다.Duration은 초와 나노초 단위의 시간을 표현합니다.java.time 패키지에는 날짜와 시간 처리에 대한 유연성을 제공하는 여러 인터페이스가 존재합니다.TemporalAccessor, TemporalLocalDateTime, OffsetDateTime, ZonedDateTime, Instant 등의 주요 클래스들이 위 인터페이스를 구현합니다.Temporal은 TemporalAccessor를 상속받는 클래스이며, 주요한 차이점은 다음과 같습니다.TemporalAccessor : 날짜와 시간 정보를 읽을 수 있는 최소한의 기능 제공 (읽기전용)Temporal : 날짜와 시간을 조작하기 위한 기능을 제공 (읽기&쓰기 지원)TemporalAmountPeriod와 Duration 클래스에서 구현되는 인터페이스입니다.java.time 패키지는 다양한 단위와 필드를 제공합니다ChronoUnit & ChronoFieldChronoUnit은 날짜와 시간의 특정 단위를 표현합니다. (참고로 "TemporalUnit" 인터페이스를 구현합니다.)ChronoField는 특정 날짜 또는 시간 필드를 나타냅니다. (참고로 "TemporalField" 인터페이스를 구현합니다.).get(): 특정 필드의 값을 가져옵니다..plus() or minus(): 특정 단위를 더하거나 뺍니다..isSupported(): 특정 필드 또는 단위가 지원되는지 확인합니다..with(): 특정 필드의 값을 변경합니다.DateTimeFormatter 클래스를 통해 수행됩니다. .format) : 날짜 & 시간 -> String.parse) : String -> 날짜 & 시간java.time 패키지의 클래스들은 이 포맷터를 활용해 직관적인 날짜와 시간 처리를 지원합니다.java.time 패키지는 기존의 날짜와 시간 처리 방식에서 발생하던 여러 문제를 해결하기 위해 도입되었으며, 다양한 클래스와 인터페이스를 통해 보다 직관적이고 강력한 날짜와 시간 처리를 지원합니다.java.time 패키지의 주요 클래스 및 인터페이스를 예제와 함께 보다 깊이 있게 다루고, 날짜 및 시간 작업을 어떻게 수행할 수 있는지 상세히 정리할 예정입니다.