检查列表<日期>中的日期是否相互跟随</date>

时间:2010-07-30 08:38:45

标签: java date

我不知道我是否正确描述了它。 我在Java中有几个日期列表。现在我需要知道列表何时包含至少4个相互跟随的日期。例如“2010-06-27,2010-06-06,2010-06-06,2010-05-06”。 我只是想知道从哪里开始.... 谢谢!

5 个答案:

答案 0 :(得分:1)

迭代列表并将每个日期与下一个日期进行比较,直到您有四个匹配的条件。

答案 1 :(得分:1)

这个怎么样:

public static boolean checkList(List<Date> list) {
    int count = 0;
    for (int i = 0; i < list.size()-1; ++i) {
        if (list.get(i).after(list.get(i+1))) {
            count = 0;
        } else {
            ++count;
            if (count == 4) {
                return true;
            }
        }
    }
    return false;
}

答案 2 :(得分:0)

这是我的方法......

    public List<List> getList(List<List<Date>> lists, int num) {
    List<List> result = new ArrayList<List>();
    for (List list : lists) {
        Collections.sort(list);
        if (checkList(list, num)) {
            result.add(list);
        }

    }
    return result;
}

public boolean checkList(List<Date> list, int num) {
    int count = 0;
    for (int i = 0; i < list.size() - 1; i++) {
        Calendar calendar1 = Calendar.getInstance();

        calendar1.setTime(list.get(i));
        calendar1.set(Calendar.DAY_OF_MONTH,calendar1.get(Calendar.DAY_OF_MONTH)+1);
        calendar1.set(Calendar.HOUR_OF_DAY,0);
        calendar1.set(Calendar.MINUTE,0);
        calendar1.set(Calendar.MILLISECOND,0);

        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTime(list.get(i + 1));
        calendar2.set(Calendar.HOUR_OF_DAY,0);
        calendar2.set(Calendar.MINUTE,0);
        calendar2.set(Calendar.MILLISECOND,0);

        if (calendar1.equals(calendar2)) {
            count++;
        } else {
            count = 0;
        }
        if (count >= num) {
            return true;
        }
    }
    return false;
}

答案 3 :(得分:0)

将日期(以毫秒为单位)转换为日期/日历类,然后比较非常简单。

答案 4 :(得分:0)

现在就是我的方法。 返回一个整数列表,表示该时间段内一行中每个天数的长度。谢谢罗素的方法。我尝试了Date的compareto(),直到我意识到它的返回值并不代表两个比较日期彼此分开的日子。

     public List<Integer> countdaysinarow(List<Date> dates){
    int daysinarow = 0;  

    List<Integer> list = new ArrayList<Integer>();

    for (int i = 0; i < dates.size() - 1; i++) {
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(dates.get(i));
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(dates.get(i + 1));
        cal1.set(Calendar.DAY_OF_YEAR, cal1.get(Calendar.DAY_OF_YEAR) + 1);

        if(cal1.equals(cal2)){
            daysinarow++;
        }
        else if(daysinarow > 0){
                list.add(new Integer(daysinarow));
            daysinarow = 0;
        }

        if(daysinarow != 0 && (i == dates.size() - 2)){
            list.add(new Integer(daysinarow));
        }   
    }       
    return list;
 }