2012-08-09 83 views
11

假設當前日期爲5月28日。如果我將以下命令調用以使輸出變爲在Android中向日歷添加一天失敗31日

cal.add(Calendar.DATE, 1); // Day = 29 
cal.add(Calendar.DATE, 1); // Day = 30 
cal.add(Calendar.DATE, 1); // Day = 31 
cal.add(Calendar.DATE, 1); // Day = 31 
cal.add(Calendar.DATE, -1); // Day = 29 

爲什麼這不是跳進下個月。爲什麼它卡在31日。 (但實際上,當你減1它跳到29.

回答

13

當您將1添加到Calendar.DATE字段時,它應該增加月以及達到月末時(在5月的情況下31),以便你寫了沒有意義 調試,並確保當天值確實是你認爲它是

0

我檢查,它成功地增加了看我的代碼和O/p:。

Calendar cal = Calendar.getInstance(); // today is 09-Aug-2012 

for(int i=0;i<23;i++) { 
    cal.add(Calendar.DATE, 1); 
} 
System.out.println(cal.get(Calendar.DAY_OF_MONTH)); 

O/p

1

3

似乎我錯了!根據api,滾動只更新spezific領域!

如果添加天日曆嘗試

cal.roll(Calendar.DATE, 1); 

飛越

您正在使用的日曆的實施
+1

卷只有「滾動」你改變的領域,不改變大的領域 – IncrediApp 2012-08-09 11:19:07

+0

http://docs.oracle.com/ javase/1.4.2/docs/api/java/util/Calendar.html#roll(int,int) – IncrediApp 2012-08-09 11:20:54

+1

@IncrediApp似乎是對的,滾動的解釋首先向另一個方向建議_「指定的增量或減量字段並在超出當前日期的最大值或最小值時包裝字段的值,其他字段將根據需要進行調整以保持一致的日期。「_ – Kostronor 2012-08-09 11:24:35

1

時,這將增加一個月,一年?因爲它似乎適用於其他人...

0

這不是一個答案,只是一個線索:我發現它發生在DST在日期之間開始時發生。也許這是你的情況......

例如:使用巴西DST今年開始在「太陽報10月20日00:00:00 2013」​​

Calendar cal = Calendar.getInstance(); // today = Sat Oct 19 00:00:00 BRT 2013 
cal.add(Calendar.DATE, 1); // = Sat Oct 19 23:00:00 BRT 2013 

不幸的是,我仍然不知道如何變通方法, 。

21

你可以用兩個簡單的方法很容易地做到這一點我的朋友。第一個是:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_MONTH, 1); 

,第二個是:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.HOUR_OF_DAY, 24); 

我想你想找到這個東西。 謝謝。

0

這也應該這樣做。

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_YEAR, 1); 

您可以測試它與:

for (int i = 0; i < 365; i++) { 
    cal.add(Calendar.DAY_OF_YEAR, 1); 
    System.out.println(cal.getTime().toString()); 
}