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);
시분초를 다 없앴다..
'개인적인 프로그램 > JAVA/JSP' 카테고리의 다른 글
request 라인단위로 읽기 (0) | 2011.10.26 |
---|---|
java 썸네일 thumbnail (0) | 2011.10.26 |
흠 static{} 이걸 왜 쓰는걸가? (0) | 2011.10.26 |
javascript로 동영상을 목록으로 재생하는 방법에 대해서. (0) | 2011.10.26 |
util을 만들면서... (0) | 2011.10.26 |