Java 8 부터 java.time
패키지에서 Date and Time API
를 제공한다. 해당 API는 ISO 8601이라는 날짜와 시간의 국제 규격에 맞춰져있고, 스레드 세이프하다.
클래스 이름 | 개요 | 예 |
---|---|---|
LocalDate | 타임존을 갖지 않는 날짜를 표시 | 2020-12-16 |
LocalDateTime | 타임존을 갖지 않는 일시를 표시 | 2020-12-16T21:04:00 |
LocalTime | 타임존을 갖지 않는 시간을 표시 | 21:04:00 |
OffsetDateTime | UTC의 시차를 가진 일시를 표시 | 2020-12-16T21:04:00-09:00 |
OffsetTime | UTC의 시차를 가진 시간을 표시 | 21:04:00-09:00 |
ZonedDateTime | 타임존을 가진 일시를 표시 | 2020-12-16T12:04:00+01:00Europe/Paris |
Duration | 기간을 시간으로 표시 | PT3600S |
Perioid | 기간을 날짜로 표시 | P1Y2M3D |
자바 8 이전에는 Joda Time
이라는 라이브러리를 사용하였으나, 8 이상은 java.time
패키지를 활용하는 것이 좋다. 자바 8 이전에는 사실상 표준이었으나, Joda Time 공식 홈페이지에서도 자바 8 이상은 java.time
으로 개발하는 것을 권장한다.
Date and Time API
의 클래스는 모두 변하지 않는 클래스이다. java.util.Calendar
는 set()
메서드나 add()
메서드 등을 사용하여 해당 인스턴스의 날짜를 변경할 수 있다. 하지만 java.time.LocalDateTime
은 plus()
메서드나 minus()
메서드로 날짜를 더하거나 뺄 수 있지만, 자신의 날짜를 바꾸지 않고 새로운 LocalDateTime
인스턴스를 생성하고 반환한다.
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 1);
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime result = dateTime.plusDays(1);
Immutable 클래스는 인스턴스가 생성되면 값이 바뀌지 않기 때문에 의도치 않은 수정에 의한 오류를 방지하여 코드의 안정성을 높일 수 있다.