2012-08-09 84 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()); 
}