프로그램/Java

[Java] Date 객체와 날짜 처리 방법

neorc 2025. 3. 13. 16:12
Java에서 날짜와 시간을 다루는 것은 개발에서 필수적인 요소 중 하나입니다. 예를 들어, 사용자의 가입일을 기록하거나, 특정 작업의 수행 시간을 측정할 때 날짜 처리가 필요합니다.
하지만, Java의 날짜 처리는 여러 가지 방식이 존재하며, Date, Calendar, LocalDateTime 등 다양한 클래스가 존재합니다. 이번 글에서는 Date 객체를 중심으로 날짜 처리 방법을 살펴보고, 보다 현대적인 java.time 패키지 활용법도 간단히 소개하겠습니다.

 

Date 객체 사용하기

Java의 java.util.Date 클래스는 가장 기본적인 날짜 처리 클래스입니다. 하지만 Date 클래스는 내부적으로 UTC(협정 세계시)를 기반으로 하고 있으며, 시간대를 직접 설정할 수 없다는 단점이 있습니다.

import java.util.Date;

public class DateExample {
    public static void main(String[] args) {
        Date now = new Date(); // 현재 날짜 및 시간
        System.out.println("현재 날짜 및 시간: " + now);
    }
}

 

SimpleDateFormat으로 날짜 포맷 변환하기

날짜 데이터를 원하는 형식으로 변환하려면 SimpleDateFormat을 사용해야 합니다.

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatExample {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = formatter.format(now);
        System.out.println("포맷된 날짜: " + formattedDate);
    }
}

yyyy-MM-dd HH:mm:ss 형식으로 출력되며, 원하는 형태로 변경 가능합니다.

주의: SimpleDateFormat스레드 안전하지 않으므로, 멀티스레드 환경에서는 ThreadLocal을 활용하거나 java.time 패키지를 사용하는 것이 좋습니다.

Calendar 클래스로 날짜 조작하기

Date 클래스만으로는 날짜 연산이 어렵기 때문에, Calendar 클래스를 활용해야 합니다.

import java.util.Calendar;
import java.util.Date;

public class CalendarExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH, 5); // 5일 후 날짜 계산
        Date futureDate = calendar.getTime();
        System.out.println("5일 후 날짜: " + futureDate);
    }
}

Calendar.getInstance()를 사용하여 객체를 생성하고, add() 메서드로 날짜를 변경할 수 있습니다.

✔ 하지만 Calendar 클래스 역시 직관성이 떨어지고 사용하기 불편하다는 단점이 있습니다.

java.time 패키지(LocalDate, LocalDateTime) 활용하기

Java 8 이후부터는 java.time 패키지를 사용하여 날짜 및 시간을 더욱 쉽게 다룰 수 있습니다.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class LocalDateExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now(); // 현재 날짜
        System.out.println("현재 날짜: " + today);

        LocalDate futureDate = today.plusDays(10); // 10일 후 계산
        System.out.println("10일 후: " + futureDate);
    }
}

LocalDate.now()를 사용하면 간단하게 현재 날짜를 가져올 수 있습니다.

plusDays() 같은 메서드를 활용하여 날짜를 쉽게 연산할 수 있습니다.

java.time 패키지는 불변 객체(immutable) 로 설계되어 있어 스레드 안전(thread-safe)합니다.

날짜 문자열 변환 및 비교하기

날짜를 문자열로 변환하거나, 두 날짜를 비교하는 방법도 자주 사용됩니다.

 

📌 문자열 → 날짜 변환

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse("2024-02-20", formatter);
System.out.println("문자열에서 변환된 날짜: " + date);

📌 두 날짜 비교하기

LocalDate date1 = LocalDate.of(2024, 2, 10);
LocalDate date2 = LocalDate.of(2024, 2, 20);

if (date1.isBefore(date2)) {
    System.out.println("date1이 date2보다 이전 날짜입니다.");
} else {
    System.out.println("date1이 date2보다 이후 날짜입니다.");
}

isBefore(), isAfter() 메서드를 사용하여 날짜를 직관적으로 비교할 수 있습니다.

결론 (Conclusion)

지금까지 Java에서 날짜와 시간을 다루는 방법을 살펴보았습니다.

Date 클래스는 기본적인 날짜 표현을 제공하지만, 다소 불편한 점이 많습니다.
Calendar 클래스는 날짜 조작 기능을 제공하지만, API가 직관적이지 않습니다.
java.time 패키지(LocalDate, LocalDateTime)는 최신 Java에서 권장되는 방식으로, 불변성 및 가독성이 뛰어납니다.

만약 새로운 프로젝트를 시작한다면 java.time 패키지를 적극 활용하는 것이 좋습니다. 기존 코드와의 호환성이 필요할 경우 DateCalendar도 함께 사용할 수 있습니다.