在Java中将日期比较为字符串

时间:2018-09-05 10:43:12

标签: java string string-comparison

我很难将日期作为字符串进行比较。我需要遍历一个集合,并将每个对象的日期值与作为参数传递的2个日期进行比较。日期全部存储为字符串,并且必须保持这种方式。

众所周知,日期将全部格式化为YYYY-MM-DD。以下是我的意思的简单示例。谢谢大家!

public ArrayList<Object> compareDates(String dateOne, String dateTwo) {
    for(Object object : objectCollection) {
        String objectDate = object.getDate();
        if(objectDate.equals(dateOne) || objectDate.equals(dateTwo)) { // Unsure of how to determine if the objects date is inbetween the two given dates
            //add object to collection
        }
    }
return  collection;
}

4 个答案:

答案 0 :(得分:2)

由于您的日期采用YYYY-MM-DD格式,因此可以使用字典比较来确定两个日期之间的顺序。因此,您可以只使用String.compareTo()方法来比较字符串:

int c1 = objectDate.compareTo(dateOne);
int c2 = objectDate.compareTo(dateTwo);
if ((c1 >= 0 && c2 <= 0) || (c1 <= 0 && c2 >= 0)) {
    // objectDate between dateOne and dateTwo (inclusive)
}

如果可以保证dateOne < dateTwo,则可以只使用(c1 >= 0 && c2 <= 0)。要排除日期范围,请使用严格的不等式(><)。

答案 1 :(得分:0)

这是您需要遵循的步骤:

  1. 将String dateOne和String dateTwo都转换为 java.time.LocalDate
  2. 遍历您的ArrayList并将索引的字符串转换为java.time.LocalDate

    注意:您需要接受ArrayList<String>才能将字符串解析为LocalDate,而不是ArrayList<Object>

  3. 进行比较

Refer to the documentation以实现比较逻辑。

您可以参考this link for additional help

答案 2 :(得分:0)

由于您的日期采用yyyy-MM-dd格式,因此String的compareTo应该返回一致的结果:

if(objectDate.compareTo(dateOne) >= 0 && objectDate.compareTo(dateTwo) <= 0)

这从概念上大致检查:objectDate >= dateOne && objectdate <= dateTwo

这只是必须使用字符串的方法。不过,更好的方法是将字符串转换为日期对象并执行基于日期的比较。

答案 3 :(得分:0)

如果dateOne在dateTwo之前,则可以使用以下比较,如果您希望中间有日期。

    public ArrayList<Object> compareDates(List<Object> objectCollection, String start, String end) {
        ArrayList<Object> dateBetween = new ArrayList<>();
        for(Object object : objectCollection) {
            LocalDate objectDate = parseDate(object.getDate());
            if( !objectDate.isBefore(parseDate(start)) && !objectDate.isAfter(parseDate(end))) {
                dateBetween.add(object);
            }
        }
        return dateBetween;
    }

    private LocalDate parseDate(String date) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-DD");
        return LocalDate.parse(date, formatter);
    }