假设目前的日期是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)?
答案 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());
}