我有一种方法可以比较两个日期以查看 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 < 8,不幸的是没有简单的答案(即您必须使用 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);
}
关于Java比较两个日期年月日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434579/