2013-10-25 56 views
0

我在创建日期时遇到问题。为什么GregorianCalendar返回0而不是MONTH?

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

什么失败?究竟发生了什么问题?程序崩溃了,还是只是得到意想不到的结果?实际结果与预期结果有何不同? – nhgrif

+0

31.6没有exsist我认为:(和20.0没有exisits相同 – 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不是1为主,不像白天,它是基于0。

放心,这是与Java日期API相当常见的错误,也可能是唯一的人谁认为是是合乎逻辑的是谁这个API上来的人,恐怕连他们了......

相关问题