帮助java日历逻辑

时间:2011-03-18 19:06:01

标签: java date calendar

我正在使用Java Calendar类执行以下操作:

  1. 设置开始日期
  2. 设置结束日期
  3. 该范围内的任何日期都是“有效”日期
  4. 我有点工作,有点不工作。请参阅以下代码:

        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
    

    这有效...除非当前所选日期是一个月的最后一天,或两天前(三个一起)。我认为它的偏移肯定会搞砸它,但逻辑在其他地方都可以使用。有任何想法吗?

4 个答案:

答案 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的克隆(加上额外的天数),它就开始工作了。谢谢大家的建议!

相关问题