在Android中的日历中添加一天会在31日失败

时间:2012-08-09 11:10:06

标签: java android calendar

假设目前的日期是5月28日。如果我按顺序调用以下命令

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)?

7 个答案:

答案 0 :(得分:27)

你可以通过两种简单的方式轻松地做到这一点。第一个是:

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

,第二个是:

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

我想你想找到这个东西。 感谢。

答案 1 :(得分:15)

当你向Calendar.DATE字段添加1时,它应该在月末到达时增加月份(在5月的情况下为31),这样你写的没有意义。 调试它并确保日期值确实是您认为的

答案 2 :(得分:2)

好像我错了!根据api,roll只更新spezific字段!

如果您在日历中添加天数,请尝试

cal.roll(Calendar.DATE, 1);

这会在溢出的月份和年份增加

答案 3 :(得分:1)

您使用的是哪种日历实现?因为它似乎适用于其他所有人......

答案 4 :(得分: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

答案 5 :(得分:0)

这不是答案,只是一个线索:我发现DST在日期之间开始时就会发生。也许这是你的情况......

例如:Brazillian DST今年开始于“Sun Oct 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

不幸的是,我仍然不知道如何解决这个问题。

答案 6 :(得分: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());
}