728x90
[현상]
1. 나는 2개의 Calendar 객체를 각기 다르게 셋팅해서, 두 객체를 after 메소드로 비교하려고 했다.
2. A 객체는 SimpleDateFormat을 사용하여 setTime()로 날짜를 설정했고
3. B 객체는 set()만 사용하여 날짜를 설정하려고 했다.
한마디로 아래와 같은 상황인데
Calendar calendarA = Calendar.getInstance();
calendarA.set(year, monthOfYear, dayOfMonth, 0, 0, 0);
Calendar calendarB = Calendar.getInstance();
calendarB.setTime(dateformat.parse(specificDateStr));
calendarB.set(Calendar.HOUR_OF_DAY, 0);
calendarB.set(Calendar.MINUTE, 0);
calendarB.set(Calendar.MILLISECOND, 0);
if (calendarA.after(calendarB)) {
//비교했을 때 수행하려는데... 문제는...
}
예를 들어 오늘이 2019-09-20일 때,
calendarA는 2019-09-18로 설정하고, calendarB는 2019-09-19로 설정하려고 한다면,
after()메소드로 두 객체를 비교하려는 부분에서
calendarB는 19일이지만, A는 20일로 getInstance했을때의 초기값인 오늘로 설정된다는 것이었다.
DatePickerDialog를 쓰려고 하다보니 DateSet에서는 int값3개인데 굳이 그걸 또 setTime()으로 쓰기엔 번거로운 면이 있어서
set() 메소드를 써야하는데 이런 결과를 주니까 ?????인 상태
Calendar calendarA = Calendar.getInstance();
calendarA.set(year, monthOfYear, dayOfMonth, 0, 0, 0);
calendarA.getTime(); // 어째서인지 강제로 업데이트해주는 식으로 getTime()메소드를 해줘 갱신되었다
Calendar calendarB = Calendar.getInstance();
calendarB.setTime(dateformat.parse(specificDateStr));
calendarB.set(Calendar.HOUR_OF_DAY, 0);
calendarB.set(Calendar.MINUTE, 0);
calendarB.set(Calendar.MILLISECOND, 0);
if (calendarA.after(calendarB)) {
//비교했을 때 수행하려는데... 문제는...
}
그래서 디버깅 연결하면서 로그를 찍어보려고, 위처럼 한번 getTime()을 했더니, 갱신이 되었다.
원래 이렇게 써야했던건가..? 내가 기초가 부족했던건가??? 싶어서 멘붕이 왔는데,
나와 같은 아래의 질문을 가진 사람과 답변이 있는 stackoverflow QnA를 발견...
직렬화 어쩌고 버그같은데...
728x90
'Dev > Java' 카테고리의 다른 글
RxJava 이해 (0) | 2020.02.03 |
---|---|
[Java] Java SE, EE, ME, FX의 차이 (0) | 2019.10.16 |
[Java] Singleton Pattern 사용시 (0) | 2018.10.02 |