2017-05-07 8 views
2

주 첫날을 사고 싶지만 이상한 버그가 있습니다. 이 코드를 사용하는 경우 :Android 캘린더 getFirstDayOfWeek 버그

Calendar cal = Calendar.getInstance(); 
cal.set(2017, 0, 1); 

cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); 
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()); 
Log.d(TAG, "Date: " + dateFormat.format(cal.getTime())); 

내 로그가 잘못된 날짜가 표시 D/Activity: Date: lundi 2 janvier 2017

을하지만를 난 그냥이 같은 getTime() 방법을 사용하는 경우 :

Calendar cal = Calendar.getInstance(); 
cal.set(2017, 0, 1); 
cal.getTime(); // Here 

cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); 
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()); 
Log.d(TAG, "Date: " + dateFormat.format(cal.getTime())); 

내 로그 디스플레이 정확한 날짜를 : D/Activity: Date: lundi 26 décembre 2016

휴대 전화는 프랑스어를 사용하므로 월요일에 월요일에 시작됩니다.

누군가가 이유를 알고 있습니까?

답변

2

자바의 캘린더 API는 필드 업데이트와 관련하여 악명이 높습니다. 일부 내부가 제대로 조정되지 않아서 예기치 않은 결과가 발생할 수 있습니다. 예를 들어, 실제로 내부 부품 번호가 업데이트 될 때까지 일부 값이 업데이트되지 않습니다. getTime()에 전화 할 때.

this post에 대한 자세한 내용을 볼 수 있습니다.

따라서이 문제의 픽스는 실제로는 getTime() 또는 getTimeInMillis()을 호출하는 것입니다.

+0

완벽한, 자세한 답변 주셔서 감사합니다 :) – Louis