我正在使用Java Calendar类执行以下操作:
我有点工作,有点不工作。请参阅以下代码:
nowCalendar.set(Calendar.DATE, nowCalendar.get(Calendar.DATE) + offset);
int nowDay = nowCalendar.get(Calendar.DATE);
Calendar futureCalendar = Calendar.getInstance();
futureCalendar.set(Calendar.DATE, nowDay + days);
Date now = nowCalendar.getTime();
Date endTime = futureCalendar.getTime();
long now_ms = now.getTime();
long endTime_ms = endTime.getTime();
for (; now_ms < endTime_ms; now_ms += MILLIS_IN_DAY) {
valid_days.addElement(new Date(now_ms));
System.out.println("VALID DAY: " + new Date(now_ms));
}
基本上,我设置了“NOW”日历和“FUTURE”日历,然后我比较两个日历以找到有效日期。在我的日历上,有效天数将以阴影显示白色,无效天数将以灰色阴影显示。您会注意到两个变量:
offset = three days after the current selected date
days = the number of valid days from the current selected date
这有效...除非当前所选日期是一个月的最后一天,或两天前(三个一起)。我认为它的偏移肯定会搞砸它,但逻辑在其他地方都可以使用。有任何想法吗?
答案 0 :(得分:2)
不要吝啬毫秒。克隆nowCalendar
,只要不超过Calendar#add()
,就会在循环中使用futureCalendar
添加1天,然后使用Date
获取Calendar#getTime()
}。
Calendar clone = nowCalendar.clone();
while (!clone.after(futureCalendar)) {
validDays.add(clone.getTime());
clone.add(Calendar.DATE, 1);
}
(请注意,我将validDays
改为List
而不是遗产Vector
)
答案 1 :(得分:2)
在第一行使用add
代替set
,否则如果您处于月份边界,则不会调整月份:
nowCalendar.add(Calendar.DATE, offset);
答案 2 :(得分:1)
public boolean isInRange(Date d)
{
Calendar cal = Calendar.getInstance();
cal.setTime(d);
return cal.after(startCal) && cal.before(endCal);
}
这里startCal是开始时间的日历实例,endCal是结束时间。
答案 3 :(得分:1)
我发现了问题:
一旦我将futureCalendar设置为nowCalendar的克隆(加上额外的天数),它就开始工作了。谢谢大家的建议!