检查日期列表是否包含特定日期

时间:2012-07-28 01:49:12

标签: java date jodatime

我正在寻找一种更好的方法来检查List java.util.DateArrayList对象(List是否会返回给我)。情况是,我返回了List个日期,我想知道我手边的日期是否在我返回的{{1}}日期之内。

目前我正在做的是循环List并使用JodaTime来比较日期。

注意:在比较日期(而非时间部分)时,只应考虑日期部分。

2 个答案:

答案 0 :(得分:8)

编写自己的Comparator。您可以使用它来执行Date对象

的单独比较
public class MyDateComparator implements Comparator<Date> {
    protected static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");

    public int compare(Date d1, Date d2) {
        return DATE_FORMAT.format(d1).compareTo(DATE_FORMAT.format(d2));
    }
}


Date myDate = ...
List<Date> listOfDates = ...
Collections.sort(listOfDates);
int index = Collections.binarySearch(listOfDates, myDate, new MyDateComparator());
if (index >= 0) {
  // you found me
}

(在iPad上用胖手指打字,摇晃3个月大睡觉,为轻微错误道歉)

答案 1 :(得分:1)

如果两个java.util.Date对象解析为相同的毫秒,则它们是相等的()。所以你可以使用List.contains():

http://docs.oracle.com/javase/6/docs/api/java/util/List.html#contains%28java.lang.Object%29 http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#equals%28java.lang.Object%29

List<Date> dates = ...
Date targetDate = ...
if (dates.contains(targetDate)) { ... }

或者,如果您知道列表已排序,则可以使用Collections.binarySearch()

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#binarySearch%28java.util.List,%20java.lang.Object%29

相关问题