Java 날짜 및 시간 클래스
Java에서 날짜와 시간을 다루기 위해 여러 클래스가 제공됩니다. 이 글에서는 java.util.Date, java.util.Calendar, java.text.SimpleDateFormat, 그리고 Java 8부터 도입된 java.time 패키지에 대해 설명합니다.
1. Date 클래스
java.util.Date 클래스는 특정 시점을 나타내는 데 사용됩니다. 이 클래스는 날짜와 시간을 밀리초 단위로 표현합니다. Date 객체는 생성 시점의 날짜와 시간을 저장하며, 다양한 메서드를 통해 날짜와 시간 정보를 얻거나 조작할 수 있습니다. 그러나 Date 클래스는 불변(immutable) 객체가 아니며, 여러 메서드가 deprecated(사용 중단) 되었기 때문에, Java 8 이후에는 java.time 패키지의 클래스를 사용하는 것이 권장됩니다.
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
Date date = new Date();
System.out.println("현재 날짜와 시간: " + date);
}
}
2. Calendar 클래스
java.util.Calendar 클래스는 날짜와 시간을 조작하기 위한 추상 클래스입니다. Calendar는 Date 객체를 기반으로 하여 날짜와 시간을 더 쉽게 다룰 수 있도록 다양한 메서드를 제공합니다. 특정 날짜를 기준으로 연도, 월, 일, 시, 분, 초 등을 설정하고 가져오는 기능을 제공합니다.
import java.util.Calendar;
public class CalendarExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println("현재 날짜와 시간: " + calendar.getTime());
calendar.add(Calendar.SECOND, 10);
System.out.println("10초 후: " + calendar.getTime());
}
}
3. SimpleDateFormat 클래스
java.text.SimpleDateFormat 클래스는 날짜와 시간을 특정 형식으로 포맷하고 파싱하는 데 사용됩니다. 이 클래스는 문자열 형태의 날짜를 Date 객체로 변환하거나, Date 객체를 문자열로 변환할 수 있는 기능을 제공합니다.
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatExample {
public static void main(String[] args) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
System.out.println("포맷된 날짜: " + formatter.format(date));
}
}
아래 예제는 위 세계 클래스 사용 예시입니다
import java.text.SimpleDateFormat; // 날짜 포맷을 위한 클래스
import java.util.Calendar; // 날짜와 시간을 조작하기 위한 클래스
import java.util.Date; // 날짜와 시간을 표현하는 클래스
public class DateTimeExample {
public static void main(String[] args) {
// 현재 날짜와 시간을 가져옵니다.
Date now = new Date();
System.out.println("현재 날짜: " + now);
// Calendar 인스턴스를 생성합니다.
Calendar calendar = Calendar.getInstance();
// 현재 날짜를 Calendar에 설정합니다.
calendar.setTime(now);
// 2초를 추가합니다.
calendar.add(Calendar.SECOND, 2);
// 변경된 날짜를 Date 객체로 가져옵니다.
Date newDateAfterSeconds = calendar.getTime();
// SimpleDateFormat을 사용하여 날짜를 포맷합니다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 포맷된 날짜 출력
System.out.println("2초 추가된 날짜와 시간: " + sdf.format(newDateAfterSeconds));
}
}
4. java.time 패키지
Java 8부터 도입된 java.time 패키지는 날짜와 시간을 다루기 위한 새로운 API를 제공합니다. 이 패키지는 더 나은 설계와 사용성을 제공하며, java.util.Date와 java.util.Calendar보다 더 직관적이고 안전하게 날짜와 시간을 처리할 수 있습니다.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JavaTimeExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println("현재 날짜와 시간: " + now);
LocalDateTime futureTime = now.plusSeconds(2);
System.out.println("2초 후: " + futureTime);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("포맷된 날짜와 시간: " + futureTime.format(formatter));
}
}
java.time 패키지에서는 ZonedDateTime 클래스를 사용하여 타임존을 쉽게 처리할 수 있습니다. 이를 통해 다양한 지역의 날짜와 시간을 정확하게 관리할 수 있습니다.
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class ZonedDateTimeExample {
public static void main(String[] args) {
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("현재 타임존 날짜와 시간: " + zonedDateTime);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
System.out.println("포맷된 타임존 날짜와 시간: " + zonedDateTime.format(formatter));
}
}
java.time 패키지의 클래스들은 불변(immutable) 객체입니다. 이는 객체의 상태가 변경되지 않음을 의미하며, 스레드 안전성을 보장합니다. 따라서 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.
java.time 패키지는 Date와 Calendar보다 성능 면에서 우수합니다. 특히, 불변 객체로 설계되어 있어 불필요한 객체 생성과 메모리 사용을 줄일 수 있습니다.
실제 프로젝트에서는 java.time 패키지를 사용하여 날짜와 시간을 관리하는 것이 일반적입니다. 예를 들어, 예약 시스템, 이벤트 관리 시스템 등에서 날짜와 시간을 정확하게 처리하는 것이 중요합니다. java.time 패키지를 사용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] MySQL과 JAVA 데이터 타입표 (0) | 2025.01.16 |
---|---|
[JAVA] java.nio 패키지 총정리 (1) | 2024.12.30 |
[Java] 파일 읽고 쓸 때 UTF-8 인코딩 처리 방법 정리 (1) | 2024.11.08 |
[Java] Javadoc 활용한 자바 주석 처리 (0) | 2024.10.30 |
[Java] 바이트 크기를 사람이 읽기 편한 형식으로 변환 (kb, mb, gb ...) (0) | 2024.10.14 |