본문으로 바로가기

자바 날짜와 시간 다루기

category Java 개발 이야기 2017. 9. 16. 01:16
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


자바 날짜와 시간 다루기

자바를 기반으로 하는 개발(서버와 안드로이드)에서 날짜를 기반으로 다양한 기능들을 제공해야 할 경우가 있습니다. 그래서 자바에서 날짜 및 시간을 다루는 대표적인 클래스를 정리해보았습니다.


대표적인 클래스   

 Class

 Description 

 java.util.Date

 특정 날짜를 저장한다. 

 java.util.Calendar  

 일시에 대한 다양한 조작을 한다. 

 java.text.SimpleDateFormat 

 지정한 서식에 따라 문자열을 Date 클래스로 변환하거나, 그 반대로 처리한다. 


특정 날짜를 저장하는 Date 클래스

Date 클래스를 이용해 현재 날짜와 시간을 콘솔화면에 촐력해 보면 그 시점의 날짜와 시간이 인스턴스에 저장됨 알 수있습니다. 다만 이런식으로 사용되는 것은 시스템 날짜를 가져올 때 정보입니다.



import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println(now);
    }
}


실행 결과

Sat Sep 16 00:03:48 KST 2017


특정 날짜를 지정하고 설정할 수 있는 Calendar

임의의 날짜를 생성할 때는 Calendar 클래스를 사용합니다. Calendar 클래스는 인스턴스를 만드는 방법이 독특합니다. new 생성자를 이용한 것이 아니라 .getInstance()를 이용하여 인스턴스를 가져오고 있습니다. Calendar은 new 생성자로 인스턴스를 생성할 수 없습니다.


Calendar의 add함수를 이용하여 특정 날짜의 앞 뒤로 이동하기


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

public class Test {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, 1);
        
        //출력용으로 Calendar 크래스에서 Date 클래스를 얻는다.
        Date nextDay = cal.getTime();
        System.out.println(nextDay);
    }
}


실행 결과

Sun Sep 17 00:09:31 KST 2017


Calendar 클래스의 add 메서드의 Parameter

void java.util.Calendar.add(int field, int amount)

 Parameter 

 Description 

 field 

 Calendar 클래스의 상수(다음 표를 참고) 

 amount 

 변경될 양을 설정(마이너스 값도 설정 가능) 


Calendar 클래스의 add 메서드의 field

 Field

 Description

 YEAR 

 연

 MONTH 

 월 

 DATE 

 일 

 DAY_OF_MONTH

 일(DATE와 같음) 

 HOUR_OF_DAY 

 24시간제 시간 

 HOUR 

 12시간제 시간 

 MINUTE 

 분 

 SECOND 

 초 

 MILLISECOND

 밀리초 


Calendar의 set함수를 이용하여 특정 날짜로 데이터를 지정하기

아래 출력된 결과의 날짜가 1로 바뀐 것을 알 수 있습니다. add 메서드는 지정된 날짜에서앞 뒤로 이동했지만, set 메서드는 지정된 값이 날짜와 상관없이 설정됩니다. set 메서드는 add 메서드와 달리 마이너스 인자가 올 수 없습니다.


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

public class Test {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, 1);
        
        //출력용으로 Calendar 크래스에서 Date 클래스를 얻는다.
        Date nextDay = cal.getTime();
        System.out.println(nextDay);
    }
}


실행결과

Fri Sep 01 00:21:32 KST 2017


날짜 데이터에서 특정 항목을 추출하기

Calendar에서 날짜 데이터를 추출하기 위해서는 get 메서드를 사용해야 합니다. 

실행 결과를 보면 현재는 9월인데 월이 8로 출력되고 있습니다. 자바에서는 월에서 1을 뺀 값을 가져옵니다. 아래 상수 표를 보셔서 정리하시면 됩니다.



import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); //출력용으로 Calendar 클래스에서 Date 클래스를 가져옵니다. Date date = cal.getTime(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DATE); int hour = cal.get(Calendar.HOUR); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); System.out.println(date); System.out.println(year); System.out.println(month); System.out.println(day); System.out.println(day); System.out.println(hour); System.out.println(minute); System.out.println(second); } }


실행 결과

Sat Sep 16 00:35:32 KST 2017
2017
8
16
16
0
35
32


 Field

 Description

 Calendar.YEAR 

 현재 연도

 Calendar.MONTH 

 현재 월 (1월은 0)

 Calendar.DATE 

 현재 월의 날짜 

 Calendar.WEEK_OF_YEAR

 현재 년도의 몇째 주

 Calenda.WEEK_OF_MONTH 

 현재 월의 몇째 주 

 Calendar.DAY_OF_YEAR

 현재 년도의 날짜 

 Calendar.DAY_OF_MONTH

 현재 월의 날짜(DATE와 같음) 

 Calendar.DAY_OF_WEEK

 현재 요일(일요일은 1, 토요일은 7) 

 Calendar.HOUR_OF_DAY 

 현재 시간(24시간제 시간)

 Calendar.HOUR 

 현재 시간(12시간제 시간)

 Calendar.MINUTE 

 현재 분 

 Calendar.SECOND 

 현재 초 


지정 서식으로 날짜를 출력하는 SimpleDateFormat

자바에서는 특정 서식으로 날짜를 출력하기 위해 SimpleDateFormat을 제공하고 있습니다. String 클래스의 format 메소드처럼 서식을 지정해서 출력할 내용을 만들어주고 있습니다. SimpleDateFormat 클래스는 클래스의 생성자로 미리 서식을 설정해 둡니다 나머지는 format 메서드의 인수로 Date 클래스를 넘겨주면 서식에 맞게 날짜를 출력할 수 있습니다.


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

public class Test {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        //출력용으로 Calendar 클래스에서 Date 클래스를 가져옵니다.
        Date date = cal.getTime();
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        String formatStr = sdf.format(date);
        System.out.println(formatStr);
    }
}


실행 결과

2017/09/16


 Symbol 

 Description

 Example

 y

 year : 년도 

 yy : 14 , yyyy : 2014

 M

 month in year : 월 

 M : 1, MM : 01, MMM : 1월 

 d

 day in month : 일

 d : 1, dd : 01, ddd : 001, dddd : 0001

 h

 hour in am/pm(1-12) : 시

 h : 1  , hh : 01, hhh : 001, hhhh : 0001

 a

 am/pm marker

 a : 오후

(AM/PM 으로 표시하려면 format에서 Locale.US를 지정)

 k

 hour in day (1-24) : 시

 k : 13, kk : 13, kkk : 013, kkkk : 0013

 m

 minute in hour : 분 

 m : 20, mm: 20, mmm : 020, mmmm : 0020

 s

 second in minute : 초

 s : 10, ss : 10, sss : 010. ssss: 0010

 w

 week in year : 주(년기준) 

 w : 1, ww : 01, www :001, wwww : 0001 

 D 

 day in year : 일(년기준)

 D : 1, DD : 01, DDD: 001, DDDD : 0001 

 E

 day of week : 요일

 E : 수

 F

 day of week in month

: 월 기준 주간 요일 순번 

 F : 1, FF : 01, FFF:001, FFFF:0001

 G

 era designator : 시대

 AD 

 H

 hour in day (0-23) : 시 

 H: 13, HH : 13, HHH : 013 , HHHH:0013

 K

 hour in am/pm(0-11) : 시 

 K: 1 , KK : 01, KKK :001, KKKK: 0001 

 S

 fractional seconds : 초

 S : 402 

 W

 week in month : 주 (월기준) 

 W : 1, WW : 01, WWW : 001, WWWW : 0001

 z

 time zone

 z : KST, zzzz: 한국표준시

 Z

 time zone (RFC 822) 

 Z : +0900