2011-01-12 158 views
1

我想在程序中使用毫秒來設置新的日期,但它不起作用。有沒有人可以告訴我爲什麼它不起作用?關於GregorianCalendar:在java中輸入相同但輸出不同

Calendar r_1 = new GregorianCalendar(2011,0,1);

r_1.add(Calendar.DAY_OF_MONTH,2);

System.out.println(r_1.getTime());

long date_1 = r_1.getTimeInMillis()+ 2 * 24 * 60 * 60 * 1000;

r_1.setTimeInMillis(startTime1);

System.out.println(r_1.getTime());

它的工作原理都非常正確,但如果我將日期從2更改爲25,那麼它可以工作。

----------輸出是正確的,它是2011/01/26 ----------

日曆R_1 =新的GregorianCalendar(2011,0, 1);

r_1.add(Calendar.DAY_OF_MONTH,25);

System.out.println(r_1.getTime());

-----------輸出現在不正確,它是2010/12/07 ------

長DATE_1 = r_1.getTimeInMillis()+ 25 * 24 * 60 * 60 * 1000; //我有變化2至25

r_1.setTimeInMillis(startTime1);

System.out.println(r_1.getTime());

由於

回答

3

表達25*24*60*60*1000是一個整數,並且已溢出的整數的大小,創建一個負數。

你的表情是2,160,000,000毫秒。 int可以保持的最大值是2,147,483,647。

爲了解決這個問題,你必須強制表達是一個長期的,如下

25L*24*60*60*1000 
+0

謝謝,它的真實。有一個溢出! – echo 2011-01-13 02:03:00

0

25*24*60*60*1000太大而不適合用int。 嘗試25L*24*60*60*1000這是一個很長的常數。

+0

你對!謝謝! – echo 2011-01-13 02:07:08

0

嘗試類似的東西:

final long k = 25*24*60*60*1000L; 
long date_1 = r_1.getTimeInMillis() + k; 
+0

非常感謝。我以這種方式嘗試過它,它的工作原理! – echo 2011-01-13 02:06:39

相關問題