2013-10-25 2 views
0

날짜를 만드는 데 문제가 있습니다.GregorianCalendar가 MONTH 대신에 0을 반환하는 이유는 무엇입니까?

Calendar gc = new GregorianCalendar(); 
int leto = randBetween(2001, 2020); 
gc.set(GregorianCalendar.YEAR, leto); 
int dan= randBetween(1, gc.getActualMaximum(GregorianCalendar.DAY_OF_YEAR)); 
gc.set(GregorianCalendar.DAY_OF_YEAR, dan); 
// System.out.println(gc.get(GregorianCalendar.YEAR) + "-" + 
//  gc.get(GregorianCalendar.MONTH) + "-" + 
//  gc.get(GregorianCalendar.DAY_OF_MONTH)); 

public static int randBetween(int start, int end) { 
    return start + (int)Math.round(Math.random() * (end - start)); 
} 

날짜를 생성하는 기능이 있지만이 기능에는 많은 오류가 있습니다. MONTH 값이 설정되지 않은 날짜가 많습니다.

31,6,2004 1,7,2004 
23,0,2013 24,0,2013 
19,0,2008 20,0,2008 
31,9,2014 31,9,2014 

그러나 왜 이런 일이 발생합니까?

+2

심지어이 API 해낸 사람은 그 논리적 인 생각하는 자바 날짜 API와 상당히 일반적인 실수, 아마도 유일한 사람이며, 아마, 확신 무엇 실패합니까? 정확히 무엇이 잘못 될까요? 프로그램이 충돌하거나 예기치 않은 결과가 나타 납니까? 실제 결과는 예상 결과와 어떻게 다른가요? – nhgrif

+0

31.6 나는 생각하지 않았다 : (그리고 20.0은 존재하지 않았다.) – user2921198

+4

Java의 달은 0부터 시작한다. 7 월 31 일, 8 월 1 일, 1 월 23 일 등이있다. – rgettman

답변

3

이 코드는 '실패'하지 않지만 예상 한 결과를 제공하지 않습니다. 당신이보고있는

날짜는 다음과 같습니다

입니다
23,0,2013 -- 23rd of January, 2013. 
31,6,2013 -- 31st of July, 2013. 

, month 하루는 달리, 그것은 0 기반, 1 기반하지 않습니다.

은 휴식이가 ... 더 이상

관련 문제