본문 바로가기
JAVA

자바 날짜 데이터 생성하기

by enai 2019. 10. 2.

 

1. Date, Calendar

 

자바에서 날짜 데이터를 생성하거나 조작할 때 가장 먼저 떠오르는 것, java.util 패키지의 Date 클래스이다.

import java.util.Date;

...

Date currentDate = new Date();

이런 식으로 현재 날짜 데이터를 생성할 수 있다.

 

특정 날짜를 생성하거나 날짜를 계산할 땐 Calendar 클래스를 사용한다.

import java.util.Calendar;

...

Calendar cal = Calendar.getInstance();
cal.set(2019, Calendar.OCTOBER , 2);
cal.add(Calendar.DATE, 7);

이런 식으로 2019년 10월 2일 날짜를 생성하고 7일을 더할 수 있다.

 

만약 날짜의 포맷을 바꾸고 싶다면,

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
String currentDate = dateFormat.format(new Date());

SimpleDateFormat을 사용하면 된다.

 

참고로 아래 문서에서 날짜 패턴들을 알 수 있다.

▶Java Platform SE7 - SimpleDateFormat

 

 

 

하지만 이 Date와 Calendar에겐 문제가 있다.

Date만으로 Calendar의 역할을 할 수 없고, Calendar도 Date 객체를 생성하므로 사용에 불편함이 있다.

이뿐만 아니라, 사회 제도나 과학으로 인해 변경되거나 사라진 날짜를 반영하고 있으므로 이 클래스들을 이용하여 날짜를 다루기가 쉽지 않다.

불변 객체가 아니라  외부의 악의적인 코드에 의해 조작될 수도 있다.

▶ 더 자세하고 정확한 내용은 아래 출처 링크에서 확인하길 바란다.

(출처: NAVER D2 - Java의 날짜와 시간 API)

 

 

 

JDK 8부터는 위의 단점들을 보완하는 날짜와 시간 API가 등장하였다.

바로 java.time 패키지이다.

이제 Date 클래스처럼 지금 날짜 데이터를 생성하고, Calendar클래스로 계산하던 것을 java.time 패키지로 대체해보겠다.

 

 

 

 

2. java.time

 

java.time 패키지에 LocalDate 클래스가 있다. 시간대를 제외한 날짜를 얻어온다.

(참고로 LocalDateTime과 LocalTime도 있다. 각각 날짜+시간, 시간을 구하는 클래스이다.)

import java.time.LocalDate;

...

LocalDate today = LocalDate.now();

이런 식으로 현재 날짜를 구해올 수 있다.

 

이틀 후를 계산하려면 다음과 같이 하면 된다.

long days = 2L;
LocalDate twoDaysLater = LocalDate.now().plusDays(days);

plusWeeks, plusMonths, plusYears도 있다.

 

 

참고로 java.time 패키지 내에 날짜 포맷을 지정하는 클래스도 있다.

DateTimeFormatter이다.

import java.time.format.DateTimeFormatter;

...

LocalDate currentDate = LocalDate.now();
String currentDateStr = currentDate.format(DateTimeFormatter.ofPattern("yyyy.M.d"));

 

 

 

 

더 많은 내용은 아래 공식 문서를 참고하면 된다.

Java Platform SE8 - Package java.time

 

 

 

앞으로는 Date와 Calendar 사용을 지양하고, java.time 패키지를 사용하도록 해야겠다.

 

 

 

댓글