Android(Java)GregorianCalendar奇怪的行为

时间:2015-09-07 14:09:53

标签: java android date gregorian-calendar

我遇到java Date类型的问题。为什么我的代码daysdays1都等于88?

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));

2 个答案:

答案 0 :(得分:3)

原因是你给dateNow一个月03,这意味着它将它作为4月,因为它从0开始,0 = 1月; 1 = 2月等。 现在,您将每月的日期定为31.因为4月只有30天,所以它将递增并将日期视为5月1日,这与您的dateNow1相同。

因此价值相同。

希望这有帮助。

答案 1 :(得分:3)

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

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

表示与

相同的日期
GregorianCalendar dateNow1 = new GregorianCalendar(2014,04,01);

这是因为月份计数从0开始,所以03是4月而不是3月。 访问Official GregorianCalendar JavaDoc以获取有关构造函数使用和其他内容的更多信息。