CalendarUtil은 기본적으로 Calendar를 기반으로 만들고 있는데

기본적인 날짜가 주어지고 Calendar의 set(int field, int value) 메쏘드를 이용하여

년,월,일을 별도로 세팅할 수 있게 하려고 했다.

벗뜨..

만약 2008년3월31일상태에서

Calendar c = Calendar.getInstance()

c.set(2008,2,31) // 월은 0이 1월이다.

c.set(Calendar.MONTH,1) //2월로 세팅

2월로 세팅할경우

Date형으로 바꾸고 포멧변환을 이용해서 String으로 변환하면 환산하면 2008년3월2일이된다.

 

java.text.SimpleDateFormat formatter =
            new java.text.SimpleDateFormat ("yyyyMMhh", java.util.Locale.KOREA);
 formatter.format(c.getTime()); 

 

대략난감해지는 상황..

이것은 비단 월만이 아니라 년도에도 해당된다.

이걸극복할 방법으로는 예를 들면 해당월의 일수나 해당년도의 일수를 구해서 계산을 통해 add()메쏘드를 이용해서

처리하는 방법이 있겠으나. 이것은 개발자마다 극히 주관적으로 생각할 수 있는 위험성이 있다고 판단되어 아예 년.월,일을 각각 세팅하는 메쏘드를 빼버렸다.

 

그리고 2개의 날짜를 계산하는것..

기본적으로 CalendarUtil는 내부에 Calendar 객체를 가지고 이것을 통해서 연산을 하고 날짜를 저장한다.

그런데..

추가로 날짜를 받아서 두 날짜의 차이를 구하면 원하는 차이값이 안나온다..

보통 사용돼는 방법이 2개의 값을 Date형으로 바꿔서 getTime()메쏘드를 이용해서 밀리초단위로 long형 데이터를 받아 이것을 비교하는 방법이다.

그런데 CalendarUtil내부 Calendar 객체는 이 long형 데이터 자체가 원하는 값이 나오지 않았다.

 

이유인 즉슨 CalendarUtil 생성자에서

 

this.calendar = Calendar.getInstance();   만으로 처리 했기떄문이다.

CalendarUtil 에서 내가 기본적으로 잡은 컨셉은 년월일에 대한 손쉬운 데이터 계산..

그런데 Calendar.getInstance();   했을경우

현재 시분초가 다들어간다..

그러니 나오는 데이터에 서 오차가 있을수밖에..

3월 13일 3시와 3월 14일 0시는 24시간의 차이가 없기때문에 날자차이가 1이 못되는 것이다..

그래서

 

this.calendar.clear(Calendar.HOUR);
  this.calendar.clear(Calendar.MINUTE);
  this.calendar.clear(Calendar.SECOND);
  this.calendar.clear(Calendar.MILLISECOND);

 

시분초를 다 없앴다..

Posted by 삽지리
,