2015-09-07 44 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