2015-09-07 98 views
0

我有问题与java Date类型。为什么在我的代码daysdays1都等于88?Android(Java)GregorianCalendar的奇怪行为

GregorianCalendar dateNow = new GregorianCalendar(2014,03,31); 
GregorianCalendar dateFirstDay = new GregorianCalendar(2014,01,01); 
long diffInMillies = dateNow. getTimeInMillis() - dateFirstDay. getTimeInMillis(); 
int days = (int) (diffInMillies/(1000*60*60*24)); 

GregorianCalendar dateNow1 = new GregorianCalendar(2014,04,01); 
GregorianCalendar dateFirstDay1 = new GregorianCalendar(2014,01,01); 
long diffInMillies1 = dateNow1. getTimeInMillis() - dateFirstDay1. getTimeInMillis(); 
int days1 = (int) (diffInMillies1/(1000*60*60*24)); 
+1

(顺便说一句,你意识到你发现“4月31日”和2月1日之间的区别,对吧?在日历中以月份为基准...) –

回答

3

的原因是,你是每月给予dateNow一个月的03,这意味着它是把它作为四月,因为它从0开始0 =月; 1 =二月等等 现在,你月份的日数为31.由于4月份只有30天,因此将日期递增并视为5月1日,与您的日期1相同。

因此具有相同的值。

希望这会有所帮助。

+0

谢谢兄弟。 –

+0

也是天的零基? –

3

这是预期的行为,事实上:

GregorianCalendar dateNow = new GregorianCalendar(2014,03,31); 

表示相同的日期作为

GregorianCalendar dateNow1 = new GregorianCalendar(2014,04,01); 

这是因为几个月计数从0开始,所以03是四月和不是在3月。 访问Official GregorianCalendar JavaDoc了解更多关于构造函数使用情况和其他信息。

+0

也是天的零基? –

+0

不,DAY_OF_MONTH从1开始 – RickyGo