[java] Joda-Time과 Java 8의 java.time 패키지 비교

Java는 시간과 날짜를 다루는 데 많은 기능을 제공하는 Joda-Time 라이브러리를 오랫동안 사용해왔습니다. 하지만 Java 8에서는 이러한 기능들을 표준으로 지원하는 java.time 패키지를 소개했습니다. 이번 글에서는 Joda-Time과 java.time 패키지의 주요 기능 비교를 해보겠습니다.

1. 기본적인 사용법

Joda-Time

import org.joda.time.DateTime;

DateTime currentDate = new DateTime();
int year = currentDate.getYear();
int month = currentDate.getMonthOfYear();
int day = currentDate.getDayOfWeek();

java.time

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;

LocalDate currentDate = LocalDate.now();
int year = currentDate.getYear();
int month = currentDate.getMonthValue();
int day = currentDate.getDayOfWeek().getValue();

2. 날짜와 시간 간의 연산

Joda-Time

DateTime futureDate = currentDate.plusDays(7);
Duration duration = new Duration(currentDate, futureDate);
long daysBetween = duration.getStandardDays();

java.time

LocalDate futureDate = currentDate.plusDays(7);
Period period = Period.between(currentDate, futureDate);
int daysBetween = period.getDays();

3. 날짜와 시간 간의 포맷팅 및 파싱

Joda-Time

String formattedDate = currentDate.toString("yyyy-MM-dd");
DateTime parsedDate = DateTime.parse(formattedDate);

java.time

String formattedDate = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate parsedDate = LocalDate.parse(formattedDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

4. 시간대(Time Zone) 처리

Joda-Time

DateTime dateTimeWithTimeZone = currentDate.withZone(DateTimeZone.forID("Asia/Seoul"));

java.time

ZonedDateTime dateTimeWithTimeZone = currentDate.atStartOfDay(ZoneId.of("Asia/Seoul"));

5. 기능 확장

Joda-Time

Joda-Time은 풍부한 기능들을 제공하며, 라이브러리를 확장하여 사용자 정의 시간 클래스를 만들 수도 있습니다.

java.time

Java 8부터는 java.time 패키지가 표준으로 지원되며, java.time.temporal.TemporalAccessor 인터페이스를 구현하여 사용자 정의 시간 클래스를 만들 수 있습니다.

결론

Joda-Time과 Java 8의 java.time 패키지는 많은 유사점과 차이점을 가지고 있습니다. Java 8에서 java.time 패키지를 사용할 수 있으며, 더욱 간결하고 편리한 API를 제공합니다. Joda-Time을 사용했던 개발자라면 Java 8에서 제공하는 java.time 패키지로의 마이그레이션을 고려해보는 것도 좋은 방법입니다.

참고: