我有一种方法可以比较两个日期,以查看transactionDate是否在validFrom和validUntil之间,validFrom和validUnti的值类似于“2017-01-01 00:00:00”,但是由于转换,交易日期有时带有不同的小时数到不同的时区。

public boolean isDateWithinEmploymentDeploymentValidityPeriod(Date transcationDate, Parameter parameter) {
    return transcationDate.compareTo(parameter.getValidFrom()) >= 0
            && (parameter.getValidUntil() == null || transcationDate.compareTo(parameter.getValidUntil()) <= 0);
}

所以我只需要比较只比较年月和日,而不考虑时间,没有将日期转换为gregorianCalendar并分别获得年月和日的最有效方法是什么?

最佳答案

不幸的是,如果您使用Java Calendar,或者可能依赖于Joda-Time之类的第三方库)。

希望您使用Java 8,以便我们可以利用java.time包的优点。因为您只想比较日期(而不是时间),并且不关心时区,所以要使用的是java.time.LocalDate

// Ideally, instances of the java.time classes are used throughout
// the application making this method useless.
private LocalDate toLocalDate(Date date) {
    return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();
}

public boolean inRange(Date date, Date from, Date until) {
    return inRange(toLocalDate(date), toLocalDate(from), toLocalDate(until));
}

public boolean inRange(LocalDate date, LocalDate from, LocalDate until) {
    return !date.isBefore(from) && !date.isAfter(until);
}

07-28 01:23
查看更多