자바 날짜와 시간 다루기
자바를 기반으로 하는 개발(서버와 안드로이드)에서 날짜를 기반으로 다양한 기능들을 제공해야 할 경우가 있습니다. 그래서 자바에서 날짜 및 시간을 다루는 대표적인 클래스를 정리해보았습니다.
대표적인 클래스
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 |
'Java 개발 이야기' 카테고리의 다른 글
자바 객체의 직렬화(Serializable, serialVersionUID) (0) | 2017.09.19 |
---|---|
자바 정규표현식 Pattern, Matcher (0) | 2017.09.18 |
자바 SMTP와 Mail 발송하기(Google, Naver) (10) | 2017.09.08 |
자바 BASE64 인코딩 디코딩하기 (2) | 2017.09.08 |
자바 랜덤함수를 이용한 인증번호 인증문자 만들기 (0) | 2017.09.02 |