본문 바로가기

JAVA/날짜/시간

자바/Java Calendar ( 캘린더 ) 시간 셋팅 TIP

자바/Java Calendar ( 캘린더 ) 시간 셋팅 TIP

이전 포스트에서 캘린더 사용의 기본적인 방법을 알아보았습니다 ㅎㅎ!!!
이번에는 캘린더를 활용한 TIP을 한가지 소개해 드릴건데요!

데이터피커나 알람등을 사용할때
현재 날짜나 사용자가 지정한날짜에 시간을 저장해야 할 경우가 있습니다.

그럴경우 어떻게 해야 할까요?음..
ㅎㅎ 사실  만약에 사용자가 원하는 시간에 알람을 띄워줘야 하는 경우
사용자가 지정한 시간이 'HHmm' 시분형태의 String 값으로 넘어 오고 있다고 생각해 봅니다.
그럼 '1530' 이런 형태로 사용자가 오늘 오후 3시30분알람 띄우고 싶으면
어떻게 생각해야 할까요?

일단,
캘린더 인스턴스를 얻어오면 디폴트로 현재 시간이 Setting 되어 있습니다.
그럴경우 보통의 경우 Add 나 set을 이용한 기본적인 Calendar 함수를 써서 구현하려고 생각 할 것 입니다.
 
// 사용자가 지정한 HHmm을 substring으로 시간과 분을 구별한다.
int timeHOUR = Integer.parseInt(time.substring(0,2));
int timeMINUTE = Integer.parseInt(time.substring(2,4));

// 캘린더에 시간을 add해준다. ( +기호는 현재시간에 + , - 기호는 현재시간에 - )
// 현재시간에 사용자가 지정한 시간과 분이 더해진 값을 구한다.
Calendar calendar = Calendar.getInstance();
calendar.add( calendar.HOUR, + timeHOUR ); 
calendar.add( calendar.MINUTE, + timeMINUTE );

// 캘린더에 시간을 set준다.
// set메서드는 좀 이해하기가 좀 난해했습니다.
// 설정값에 -1을 넣으면 오전12시를 기준으로 값이 셋팅 됩니다.
// 시간에 -1을 입력할경우 오전 11시 시간에 +1을 입력할 경우 오후1시
Calendar calendar = Calendar.getInstance();
calendar.set( calendar.HOUR, + timeHOUR ); 
calendar.set( calendar.MINUTE, + timeMINUTE ); 
위와 같은 형태의 소스가 되겠죠 !

하지만 ! 우리는 사용자가 입력한 알람의 시간값을 셋팅해주어야 합니다.
그러기 위해서는 초기화된 시/분 값이 필요합니다. ( ex 2011년 11/20일 00/00 분 ) 

그래야 사용자가 입력한 시간과 분에 맞게 알람을 띄울 수 있을 테니까요.

자 그럼 초기화 하는 방법을 알아보겠습니다.ㅎㅎ
초기화 방법은 바로 아래의 소스에 있습니다.
// 현재 년도와 날짜에서 시/분/초 만 초기화 한다.
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
java.util.Date date = calendar.getTime();
String Today = new SimpleDateFormat("yyyyMMdd").format(date);
try {
	calendar.setTime(formatter.parse(Today));
} catch (ParseException e1) {
	e1.printStackTrace();
} 
Log.d("test", new SimpleDateFormat().format(calendar.getTimeInMillis()));
위에서 처럼 현재 날짜를 yyyyMMdd(2011/11/20) 이런식으로 받게 된다면,
자연스럽게 오늘 날짜년도에 시간/분/초는 00/00/00으로 셋팅 됩니다.

그럼 사용자가 원하는 시간과 분만 셋팅 해주면 되겠죠?ㅎㅎ

답은 이전에도 다뤘던 SimpleDateFormat 였습니다.ㅎㅎ
저도 사실이전에 SimpleDateFormat 을 사용할때는 초기화 된다는 사실을 몰랐는데 이번에 알게되었네요 ㅎㅎ

만약에 날짜도 초기화 셋팅하고싶다면 yyyyMM 의 형식으로 일단 format팅 해주면 되겠죠?ㅎ
아무튼 필요한 곳에 잘 사용하셨으면 좋겠습니다.!

그리고 몇가치 팁을 더 알려드리자면,
calendar.DAY_OF_WEEK 는 ( 주중에 하루 )
아래와 같이 처리하시면 현재 속하는 주의 1에 해당하는 요일이 반환 됩니다. (1은 일요일 2는 월요일 순서 입니다.) 
calendar.set( calendar.DAY_OF_WEEK, 1 );

마찬가지로,
calendar.DAY_OF_MONTH ( 달중에 하루 )
calendar.DAY_OF_YEAR ( 년중에 하루 ) 등의 Flag가 있습니다.!!

ㅎㅎ 참고하시고!! 즐거운 캘린더 코딩하세요~!ㅎㅎ