ILoveCoffee, ILoveJava

Calendar 객체에서 주, 요일(일~토)를 이용한 날짜 변환

jeeyong 2012. 5. 29. 11:38

자바에서 자주사용하는 객체가 있다면 그건 java.util.Date 그리고 그 다음이 java.util.Calendar 일 것이다. 그 중에서 날짜를 변환 하기 위해 사용되는 객체는 java.util.Calendar 객체일 것인데, 일반적으로 날짜를 변환 하려 할 경우 년, 월, 일 을 Set 하는 방법으로 변환 하곤 했다. 이 방법은 기초중에 기초 가장 자주사용하고 그렇기 때문에 설명할 필요도 없는 쉬운 방법인데... 모든 프로젝트가 그렇듯이 쉬운것이 없다. 항상 프로젝트는 예상밖에 니즈를 필요로 한다. (그래서 경력이 있는 개발자는 노하우가 쌓여있는 고급인력이 되는것이 겠지만...^^)

스케쥴을 담은 명단을 저장한다고 가정하자, 그런데 문제는 고객은 일반적인 생각을 하는 사람이 아니다. 그 사람은 요일을 좋아한다. 그래서 항상 스케쥴을 정리할때 날짜를 "2012년 6월 둘째주 화요일" 이렇게 저장한다. 물론 정상적인 사고방식을 가진 사람이라면 데이터를 정리 하기에 불편하니 2012년 6월 5일로 기록하는 것으로 협조를 구할텐데 위에서 말한대로 정상적인 사고방식을 가진 사람이 아니다. 고집이 있고 협의가 안되는 고객인것이다. 이럴경우 고객이 적은 날짜("2012년 6월 둘째주 화요일")를 다른 사람들도 인식하기 쉽고 우리가 데이터화 시킬수있는 날짜로 변환해 줘야한다.

다행히 Calendar 객체에서 그 역활 해준다. 정말 다행인것이 이런 역활을 할 객체가 없으면 일일이 for문과 if문을 넣어가며 수십줄의 하드코딩을 해야할 것이고 그만한 스트레스를 그대로 받아 내야하는 것이다. 핵심이 될만한 프로세스에 집중을 하지 못하게 된다는 것이다. 

그럼 굳이 받지 않아도될 스트레스에서 벗어나게 해줄 방법 즉 본론으로 들어가겠다.

/** 6월 둘째주 화요일 날짜를 가져오기 **/
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, 6 - 1); /** 월(month)를 설정한다. 1월은 0부터 시작한다.**/
cal.set(Calendar.WEEK_OF_MONTH, 2); /** 둘째주 셋팅 **/
cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); /** 요일 셋팅 **/
System.out.println(cal.getTime());

위의 방법대로 하면 금년도의 6월 둘째주 화요일의 날짜를 구할수 있다. 어렵지 않다. 생각해보면 될 것 같지만 어떻게 해야할지 몰라서 또는 잘될까하는 의문에 시도해보지 못한 분들을 위해 포스팅해놓는다. 너무 간단한 코딩 때문에 서론을 조금 길게 썻는데 그것에 대해선 양해를 구한다.


- 끗 -