알았어.이게 저를 곤란하게합니다.Android Java 캘린더 날짜 Nexus 7의 WEEK_OF_YEAR 문제 4.2
OUTPUT : (52) 2012 (12월 24일부터 12월 30일까지)
년의 52 주의 시작과 끝입니다 나는이 문자열을 만들려고 시도합니다 다음 코드가 2012 년, 월요일은 첫 번째 요일입니다. 4.1
- 넥서스 S :
private Date getDateObject() { Calendar cld = Calendar.getInstance(); cld.set(Calendar.YEAR, year); cld.set(Calendar.WEEK_OF_YEAR, week); cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return cld.getTime(); } private Date getEndDateObject() { Calendar cld = Calendar.getInstance(); if (week < 52) { cld.set(Calendar.YEAR, year); cld.set(Calendar.WEEK_OF_YEAR, week + 1); } else { cld.set(Calendar.YEAR, year + 1); cld.set(Calendar.WEEK_OF_YEAR, 1); } cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); return cld.getTime(); } public String getDateRangeString() { String pattern = "d MMM"; SimpleDateFormat formatter = new SimpleDateFormat(pattern); Date startDate = getDateObject(); Date endDate = getEndDateObject(); String startDateFormatted = formatter.format(startDate); String endDateFormatted = formatter.format(endDate); String dateString = "" + this.week + ". " + this.year + " (" + startDateFormatted + " to " + endDateFormatted + ")"; return dateString; }
= 2012 WEEK = 52 YEAR 가진 개체에서 사용 함수 getDateRangeString 기기는 다음에 다음 출력을 제공 에뮬레이터 4.2
OUTPUT : 52. 2012 (2 12 월 4 일 ~ 12 월 30 일)
어느 쪽이 맞나요?
그러나 넥서스 7을 실행 4.2.1에
내가 얻을 :OUTPUT : (52) 2012 (1월 6일부터 12월 24일까지)
WTF를!?!?
모든 장치는 Australian EST +10으로 설정되어 있으며 현재 정확한 시간/날짜를 가지고 있습니다. 4.2.1에서 수정해야하는 4.2의 12 월 누락과 관련이 없다고 생각합니다.
디버깅 할 때 캘린더에 올바른 값이 모두 있다고 표시됩니다. 그러면 1 월 6 일이 끝납니다.
나는 12 월 31 일이 53 번째 주 같은 무엇인가라는 별난 것을 의미합니까? 나는 왜이 장치가 어떤 식 으로든 왜 다른지 알지 못한다.
캘린더 API가 매우 혼란 스럽습니다. 대신 Joda-Time을 사용하는 것이 좋습니다. – dd619
코드가 다소 혼란 스럽습니다. 거기에 숨겨진 버그가 있습니다. 시작일까지 6 일을 추가하지 않는 이유는 명확하지 않습니다 (DST 문제를 피하려면 '캘린더'에있는 동안). 다른 출력을 설명하기 위해 작업 장치와 작동하지 않는 장치 모두에서'Calendar.getMinimalDaysInFirstWeek'를 살펴볼 수 있습니다. –