LocalDate比较,获取两个日期之间的订单

时间:2018-05-28 10:01:02

标签: java hibernate jpa localdate

    public List<WorkItem> getWorkItemsByDate(String startDate, String endDate) throws ParseException {
    LocalDate parsedStartDate = LocalDate.parse(startDate);
    LocalDate parsedEndDate = LocalDate.parse(endDate);
    return workItemRepository.findAll().stream().filter(w -> w.getUpdateDate().isAfter(parsedStartDate) &&
                                                w.getUpdateDate().isBefore(parsedEndDate))
                                                .collect(Collectors.toList());
}

我有两个日期要比较,并查找日期的所有工作项(有LocalDate)。 我有一个问题,虽然我无法弄清楚如何检查相同的日期。 当你在我的代码中运行一个日期时它工作得很好,直到你写了项目的创建日期,然后它不起作用。

如何在2018-05-28 - 2018-05-28之间完成这项工作,如果这些项目是在这一天创建的,那么它将无法在我的lambda中使用。

2 个答案:

答案 0 :(得分:2)

我通常使用“不在之前”作为说“上或下”的简短方法。反过来说:

    w -> ! w.getUpdateDate().isBefore(parsedStartDate)
            && ! w.getUpdateDate().isAfter(parsedEndDate)

根据品味,您当然可以使用更多罗嗦而且更直接的

    w -> (w.getUpdateDate().isEqual(parsedStartDate) || w.getUpdateDate().isAfter(parsedStartDate))
            && (w.getUpdateDate().isBefore(parsedEndDate) || w.getUpdateDate().isEqual(parsedEndDate))

答案 1 :(得分:1)

如果当天不是之前,也不是之后,那么在这些情况下它将返回假。

您可以通过拨打isAfter来替换isBeforecompareTo,然后检查int返回值。代码不太清楚,但仍然可以理解。

.filter(w -> w.getUpdateDate().compareTo(parsedStartDate) >= 0 && w.getUpdateDate().compareTo(parsedEndDate) <= 0)