Java比较两个日期年月日

标签 java date compare

我有一种方法可以比较两个日期以查看 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/

相关文章:

C++:从命令行读取和比较

java - 基于超时的 BufferedWriter 刷新

java - 无法在 android 中执行 HTTPS/SSL/

sql - postgresql 每月创建天数表

mysql - 葡萄牙语 MYSQL 中的 MONTHNAME

javascript - 为什么检查三个字符串之间的相等性不起作用,但检查三个数字之间的相等性呢?

java - JodaTime:获取与 utc 相比具有偏移 xyz 的 DateTimeZone

java - 责任链 [GoF] 缺点

ruby-on-rails - 如何识别给定的日、月、年组合是否为合法日期?

java - 在 Array.sort() 中实现 Java 比较器