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_Jodatime - Fatal编程技术网

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

Java 检查日期列表是否包含特定日期,java,date,jodatime,Java,Date,Jodatime,我正在寻找一种更好的方法来检查java.util.Date对象的列表(ArrayList,返回给我)。场景是,我收到一个日期列表,我想知道我手头上的日期是否在我收到的日期列表中 目前我正在做的是循环列表,并使用JodaTime来比较日期 注意:在比较日期(而不是时间部分)时,只应考虑日期部分。如果两个java.util.date对象解析为相同的毫秒,则它们是相等的()。因此,您可以使用List.contains(): 列出日期=。。。 日期targetDate=。。。 如果(dates.co

我正在寻找一种更好的方法来检查
java.util.Date
对象的
列表(
ArrayList
,返回给我)。场景是,我收到一个日期列表,我想知道我手头上的日期是否在我收到的日期列表中

目前我正在做的是循环列表,并使用JodaTime来比较日期


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

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

列出日期=。。。
日期targetDate=。。。
如果(dates.contains(targetDate)){…}
或者,如果知道列表已排序,则可以使用Collections.binarySearch()

写你自己的。您可以使用它来执行
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
}
公共类MyDateComparator实现Comparator{
受保护的静态最终日期格式日期\格式=新的SimpleDataFormat(“dd/MM/yyyy”);
公共整数比较(日期d1、日期d2){
返回日期格式(d1)。与日期格式(d2)进行比较;
}
}
日期myDate=。。。
列表日期=。。。
集合。排序(列表日期);
int index=Collections.binarySearch(listOfDates、myDate、new MyDateComparator());
如果(索引>=0){
//你找到我了
}

(用胖手指在iPad上打字,摇动3个月大的孩子入睡,为小错误道歉)

你想要一个HashMap/HashSet,这样你可以在O(1)时间内找到它?请提供更多详细信息。您有java.util.Date对象的列表吗?串?其他类型的日期表示法?我有一个java.util.date对象列表。告诉我们列表是按特定顺序排序还是随机排序?嗨,安迪,没有顺序。ThxSorry仅考虑了日期组件,在我的例子中,时间组件不能用于比较。但是搜索方法
列出了
包含的内容()
使用了什么?我认为他应该使用某种在这种情况下最好的搜索方法。除非
contains()
已经这样做了。我刚才说的是哑巴哈哈。@ChinBoon:哦,我误解了。在这种情况下,循环和使用JodaTime可能是一种方法。另外,在进行比较时,请确保使用正确的时区。您可以根据需要修改比较器,或提供不同的比较器。关于二进制搜索,我唯一不喜欢的是它不会返回标记上的数组,但这是另一个问题。我喜欢使用Java Comparator/Comparable,因为这是推荐的方法。但不确定是否应将java.util.Date转换为JodaTime的DateTime,并在比较器中使用JodaTime进行日期比较。你对此有何看法?完全由你决定。您必须权衡时间成本(开发时间和执行时间),以及内存和解决方案的说服力。使用Comparator/Comparable API的主要原因是它在整个Java API中得到了很好的支持。最后,Joda Time仍然只使用Comarator API,它比我演示的更丰富;)新用户@santaji建议编辑:
Collections.sort(listOfDates,New MyDateComparator())声明“需要使用MyDateComparator()对日期列表进行排序,然后只有Collections.binarySearch()可以工作。”我拒绝了他的编辑。
如果(index!=-1)
应该是
如果(index>=0)
否则会发生不好的事情
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
}