본문 바로가기
백엔드기술/개발언어

JAVA 시간 사용하기 Date, Calendar, SimpleDateFormat

by RevFactory 2011. 12. 2.

1. 현재시간 가져오기
현재 시간을 가져오는 방법은 두가지가 있다.

Date date = new Date();
System.out.println(date.toString());


결과 : Fri Dec 02 10:18:01 KST 2011


Calendar calendar = Calendar.getInstance();
System.out.println(calendar.toString());
System.out.println(calendar.getTime().toString());

결과 :
java.util.GregorianCalendar[time=1322789029390,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=14,lastRule=null],
firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=11,WEEK_OF_YEAR=49,
WEEK_OF_MONTH=1,DAY_OF_MONTH=2,DAY_OF_YEAR=336,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,
AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=23,SECOND=49,MILLISECOND=390,ZONE_OFFSET=32400000,
DST_OFFSET=0]
Fri Dec 02 10:23:49 KST 2011



아래 스크린샷을 보면 Date 클래스의 시간을 가져오는 메서드들보다 Calendar의 get() 를 쓰기를 권장하고 있다.



Calendar클래스의 get( ) 함수는 아래와 같이 사용한다.

        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int hour = calendar.get(Calendar.HOUR);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        int millisecond = calendar.get(Calendar.MILLISECOND);


2. 날짜 조작하기
Calendar 클래스를 사용하면 날짜 조작도 쉬워진다.

        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime().toString()); 
       
        calendar.add(Calendar.DAY_OF_MONTH, 5);
        System.out.println(calendar.getTime().toString());

        calendar.add(Calendar.DAY_OF_MONTH, -5);
        System.out.println(calendar.getTime().toString());

결과 :
Fri Dec 02 10:34:36 KST 2011
Wed Dec 07 10:34:36 KST 2011
Fri Dec 02 10:34:36 KST 2011


3. 날짜 비교하기
Calendar 를 복사하고, 5일을 더 한다음 비교를 해 보았다.

        Calendar calendar = Calendar.getInstance();
        Calendar calendar2 = (Calendar)calendar.clone();
       
        System.out.println(calendar.compareTo(calendar2));
       
        calendar2.add(Calendar.DAY_OF_MONTH, 5);
        System.out.println(calendar.compareTo(calendar2));

결과 :
0    // 두 Calendar 가 같음
-1   // 앞의 Calendar 가 더 이전 날짜


4. 날짜 형식 지정하기
SimpleDateFormat 클래스를 이용하여 날짜를 원하는 형식대로 보여줄 수 있다.
또한 Local을 지정해주면 해당 지역에 맞는 포멧을 제공한다.
*대소문자 구분

        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat();
       
        format.applyPattern("yyyy-MM-dd");
        System.out.println(format.format(calendar.getTime()));
       
        format.applyPattern("yyyy년 MM월 dd일 h시 m분 s초");
        System.out.println(format.format(calendar.getTime()));
       
        SimpleDateFormat format2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
        System.out.println(format2.format(calendar.getTime()));
       
        SimpleDateFormat format3 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.KOREA);
        System.out.println(format3.format(calendar.getTime()));

결과 :
2011-12-02
2011년 12월 02일 11시 6분 30초
Fri Dec 02 11:06:30 KST 2011
금 12월 02 11:06:30 KST 2011


// 'G' - ERA
// 'y' - YEAR
// 'M' - MONTH
// 'k' - HOUR_OF_DAY
// 'E' - DAY_OF_WEEK
// 'a' - AM_PM
// 'h' - HOUR
// 'z' - ZONE_OFFSET
// 'Z' - ZONE_OFFSET
// 'd' - DATE
// 'H' - HOUR_OF_DAY
// 'm' - MINUTE
// 's' - SECOND
// 'S' - MILLISECOND
// 'D' - DAY_OF_YEAR
// 'F' - DAY_OF_WEEK_IN_MONTH
// 'w' - WEEK_OF_YEAR
// 'W' - WEEK_OF_MONTH
// 'K' - HOUR


5. 날짜 파싱하여 가져오기
날짜가 문자열로 구성되어 있을때 파싱을 해서 날짜 클래스로 가져올 수 있다.

        SimpleDateFormat format = new SimpleDateFormat("yyyy년 MM월 d일");
        String christmas = "2011년 12월 25일";
        try {
            Date date = format.parse(christmas);
            System.out.println(date.toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }

결과 :
Mon Dec 25 00:00:00 KST 2011