java日历逻辑帮助
我正在使用Java Calendar类执行以下操作:java日历逻辑帮助,java,date,calendar,Java,Date,Calendar,我正在使用Java Calendar类执行以下操作: 设定开始日期 设定结束日期 该范围内的任何日期都是“有效”日期 我有一些工作,但有些没有。请参阅下面的代码: nowCalendar.set(Calendar.DATE, nowCalendar.get(Calendar.DATE) + offset); int nowDay = nowCalendar.get(Calendar.DATE); Calendar futureCalendar = Calendar.ge
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));
}
除非当前选择的日期是该月的最后一天或两天前(总共三天),否则此操作有效。我认为是偏移量把事情搞砸了,但逻辑在其他地方都适用。有什么想法吗
public boolean isInRange(Date d)
{
Calendar cal = Calendar.getInstance();
cal.setTime(d);
return cal.after(startCal) && cal.before(endCal);
}
这里startCal是开始时间的日历实例,endCal是结束时间。不要摆弄毫秒。克隆
Now日历
,在循环中使用Calendar\add()
向其添加1天,只要它不超过futureCalendar
,并使用Calendar\getTime()
从中获取日期
(请注意,我将validDays
改进为列表
而不是传统的向量
)使用添加
而不是第一行中的设置
,否则,如果您处于月份边界,则不调整月份:
nowCalendar.add(Calendar.DATE, offset);
我发现了问题:
一旦我将futureCalendar设置为nowCalendar的克隆(加上额外的天数),它就开始工作了。谢谢大家的建议 问题是我的应用程序是针对BlackBerry的,它只包含Java的一个子集。因此,我有set()方法,但没有add()方法…BalusC-我确实实现了您的解决方案(非常干净,谢谢),但是我仍然在讨论我的原始问题。在选择任何日历日期之前,当前日历为:2011年3月18日,未来日历为2011年3月31日。在选择一个月的最后三天之后,现在的日历将变为2011年4月3日,未来的日历将变为2011年4月2日。工作正常-谢谢。你没有摆弄毫秒的说法当然是对的。
Calendar clone = nowCalendar.clone();
while (!clone.after(futureCalendar)) {
validDays.add(clone.getTime());
clone.add(Calendar.DATE, 1);
}
nowCalendar.add(Calendar.DATE, offset);