Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java日历逻辑帮助_Java_Date_Calendar - Fatal编程技术网

java日历逻辑帮助

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

我正在使用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));
        }
    
    除非当前选择的日期是该月的最后一天或两天前(总共三天),否则此操作有效。我认为是偏移量把事情搞砸了,但逻辑在其他地方都适用。有什么想法吗

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