2011-06-12 5 views
2

나는 현재 날짜의 주 번호와 저장된 sqlite 날짜의 주 번호를 비교하는 함수를 만들고 있습니다.잘못된 월 번호를 반환하는 Android 캘린더

그러나 Calendar 클래스의 set (y, m, d) 메서드는 잘못된 월 번호가있는 날짜를 항상 반환합니다. 제 경우에는 june 대신 7 월을 사용하는 날짜를 반환합니다.

06-12 19:32:37.035: DEBUG/DEBUG(5777): DATE SQL : 2011 6 12 
06-12 19:32:37.045: DEBUG/DEBUG(5777): (Actuel/Now) DATE : 3) 12/06/2011 
06-12 19:32:37.045: DEBUG/DEBUG(5777): (Actuel/Now) Numero de semaine/Week number (annee/year) : 24 
06-12 19:32:37.055: DEBUG/DEBUG(5777): (Passe/Past) DATE : 3) 12/07/2011 
06-12 19:32:37.055: DEBUG/DEBUG(5777): (Passe/Past) Numero de semaine/Week number (annee/year) : 28 
06-12 19:32:37.065: DEBUG/DEBUG(5777): DATE SQL : 2011 6 11 
06-12 19:32:37.075: DEBUG/DEBUG(5777): (Actuel/Now) DATE : 3) 12/06/2011 
06-12 19:32:37.075: DEBUG/DEBUG(5777): (Actuel/Now) Numero de semaine/Week number (annee/year) : 24 
06-12 19:32:37.075: DEBUG/DEBUG(5777): (Passe/Past) DATE : 3) 11/07/2011 
06-12 19:32:37.075: DEBUG/DEBUG(5777): (Passe/Past) Numero de semaine/Week number (annee/year) : 28 
06-12 19:32:37.095: DEBUG/DEBUG(5777): DATE SQL : 2011 6 7 
06-12 19:32:37.105: DEBUG/DEBUG(5777): (Actuel/Now) DATE : 3) 12/06/2011 
06-12 19:32:37.105: DEBUG/DEBUG(5777): (Actuel/Now) Numero de semaine/Week number (annee/year) : 24 
06-12 19:32:37.105: DEBUG/DEBUG(5777): (Passe/Past) DATE : 2) 07/07/2011 
06-12 19:32:37.105: DEBUG/DEBUG(5777): (Passe/Past) Numero de semaine/Week number (annee/year) : 27 
06-12 19:32:37.125: DEBUG/DEBUG(5777): DATE SQL : 2011 6 3 
06-12 19:32:37.125: DEBUG/DEBUG(5777): (Actuel/Now) DATE : 3) 12/06/2011 
06-12 19:32:37.125: DEBUG/DEBUG(5777): (Actuel/Now) Numero de semaine/Week number (annee/year) : 24 
06-12 19:32:37.135: DEBUG/DEBUG(5777): (Passe/Past) DATE : 2) 03/07/2011 
06-12 19:32:37.135: DEBUG/DEBUG(5777): (Passe/Past) Numero de semaine/Week number (annee/year) : 27 

내가 뭘 잘못했는지의 어떤 생각 (날짜 형식의 프랑스어입니다)

//Date depuis SQLite/Grab date from SQLite 
String[] tokens = extraireTokensDate(s.getDateHeure()); 

//Comparaison semaine/Week compare 
Calendar cal1 = Calendar.getInstance(); 
Date date = new Date(); 
cal1.setTime(date); 

Log.d("DEBUG", "DATE SQL : "+Integer.parseInt(tokens[0])+" "+Integer.parseInt(tokens[1])+" "+Integer.parseInt(tokens[2])); 
Calendar cal2 = Calendar.getInstance(); 
cal2.set(Integer.parseInt(tokens[0]), Integer.parseInt(tokens[1]), Integer.parseInt(tokens[2])); 

SimpleDateFormat sdf = new SimpleDateFormat("W) dd/MM/yyyy"); 

Log.d("DEBUG", "(Actuel/Now) DATE : "+sdf.format(cal1.getTime())); 
Log.d("DEBUG", "(Actuel/Now) Numero de semaine (annee/year) : "+cal1.get(Calendar.WEEK_OF_YEAR));  
Log.d("DEBUG", "(Passe/Past) DATE : "+sdf.format(cal2.getTime())); 
Log.d("DEBUG", "(Passe/Past) Numero de semaine (annee/year) : "+cal2.get(Calendar.WEEK_OF_YEAR)); 

디버거의 출력 :

여기 내 코드의 조각인가?

답변

10

set() 메서드로 찍은 월 수가 0이 아니기 때문에 (예 : JANUARY = 0) 정상적인 월 번호 (예 : 1 월 = 1)로 전달됩니다.

제공된 SimpleDateFormat.parse() 방법을 사용하시기 바랍니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 내 코드는 현재 작동합니다. – DoesNotCompute

+0

0 기준 개월 - 천재/직관/이성적! – RunLoop

0

Integer.parseInt (토큰 [1])의 실제 값을 확인 했습니까? 아무 것도 귀하의 코드에 문제가있는 것 같지 않습니다, 당신은 sqlite DB에서 점점 가치를 확인하시기 바랍니다?

2

달이 (특히 날짜 관련 클래스) 자바에서 0 기반

여기 Calendar::set

문서에 대한 API 인 일정 YEAR, MONTH, and DAY_OF_MONTH 필드의 값을 설정한다. 다른 달력 필드의 이전 값은 그대로 유지됩니다. 원하지 않으면 먼저 clear()으로 전화하십시오. 매개 변수 : 연도 ->YEAR 달력 필드를 설정하는 데 사용되는 값입니다.

월 ->MONTH 캘린더 필드를 설정하는 데 사용되는 값입니다. 월 값은 0 기준입니다. 1 월의 경우 0입니다.

날짜 ->DAY_OF_MONTH 달력 필드를 설정하는 데 사용되는 값입니다.

+0

감사합니다. 어디에서이 참조를 찾았습니까? 안드로이드 참조 (http://developer.android.com/reference/java/util/Calendar.html#set%28int,%20int,%20int%29)를 살펴 본다.하지만 여기서 답을 찾지 못했다. – DoesNotCompute

관련 문제