Android (Java) GregorianCalendar 奇怪的行为

Android (Java) GregorianCalendar odd behavior

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

原因是您给 dateNow 的月份是 03,这意味着它将它作为四月,因为它从 0 开始这个月。0=Jan;1=Feb 等等。 现在,您将月份的第几天指定为 31。由于 4 月只有 30 天,因此它正在递增并将日期视为 5 月 1 日,这与您的 dateNow1 相同。

因此值相同。

希望对您有所帮助。

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

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

表示与

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

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