본문 바로가기
java

[JDK8] Date, Calendar, LocaDateTime 날자 관련 객체들 사용법

by hs_seo 2015. 6. 9.

 

Date, Calendar

자바에서는 날짜 관련 처리를 지원하기 위해서 Date, Calendar 객체를 제공한다.

Date JDK 1.0, Calendar JDK 1.1 버전에서 지원되었다.

 

Date 가 좀더 간단하고, 이전 버전과의 호환성을 위해 계속 제공하고 있다.

Calendar Date 객체의 추상화 버전이라고 할 수 있고, Calendar객체를 이용하는 것을 권장한다.

특정 날짜를 지정하거나, 날짜 연산을 할 경우 Calendar를 사용한다. 또한 Calendar를 사용하여 지역화 처리를 할 수 있다.


* JDK8 이전의 Date 객체에는 몇가지 문제점이 존재한다. (http://d2.naver.com/helloworld/645609)

  - 불변 객체가 아니기 때문에 스레드에서 문제가 발생할 수 있다. 


LocalTime, LocalDate, LocalDateTime

JDK8 부터 제공되는 LocalTime, LocalDate, LocalDateTime 객체는

기존의 Date, Calendar 객체의 부족한 점을 보완하기 위해 신규로 생성된 객체이다.

 

l  Calendar Month 0부터 시작함(0 1)

l  Date 객체는 불변객체가 아님: 스레드에 안전하지 않음

 

이러한 문제점들로 인하여 Joda-Time, 아파치의 common FastDateTime 등의 라이브러리를 사용하였는데

이를 보완하기 위해 신규 객체로 제공되었다.

 

사용법은 Joda-Time 과 유사하다.

 

of() 메소드로 날짜를 설정하고, ofPattern() 메소드로 날짜를 출력할 패턴을 생성한다.

plus..(), minus..() 메소드로 날짜를 수정할 수 있다.

 

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

public class DateCalendarExample {

    public void exampleDate() {

        Date now = new Date();
        System.out.println(now);
        
        // 포맷 출력
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(now));
    }

    public void exampleCalendar() {

        // Calendar 객체 생성
        Calendar calendar = Calendar.getInstance();
        
        // 현재 일자
        Date now = calendar.getTime();
        System.out.println(now);
        
        // 포맷 출력
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(now));
        
        // 날짜 설정(달이 0부터 시작함)
        calendar.set(2014, 1, 2, 3, 4, 5);
        System.out.println("Year : " + calendar.get(Calendar.YEAR));
        System.out.println("Year : " + calendar.get(Calendar.MONTH));
        System.out.println("Year : " + calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("Year : " + calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("Year : " + calendar.get(Calendar.MINUTE));
        System.out.println("Year : " + calendar.get(Calendar.SECOND));
        System.out.println(sdf.format(calendar.getTime()));
        
        try {
            // 문자열을 일자형으로 파싱
            Date time = sdf.parse("2001-05-09 13:45:30");
            System.out.println(sdf.format(time));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    
    public void exampleLocalDateTime() {
        
        // 현재 시간
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 날짜 설정
        LocalDateTime time = LocalDateTime.of(LocalDate.now(), LocalTime.now());
        System.out.println(time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 날짜 설정
        LocalDateTime time2 = LocalDateTime.of(2014, 1, 2, 3, 4, 5);
        System.out.println(time2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 파싱
        LocalDateTime time3 = LocalDateTime.parse("2001-05-09 13:45:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(time3.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 일자 추가
        LocalDateTime time4 = LocalDateTime.now().plusDays(3);
        System.out.println(time4.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }

    public static void main(String[] args) {
        DateCalendarExample example = new DateCalendarExample();
        example.exampleDate();
        System.out.println("--------------------------");
        example.exampleCalendar();
        System.out.println("--------------------------");
        example.exampleLocalDateTime();
    }
}


반응형