java - 尝试计算两个日期之间的天数差异时的“no suitable method found for between(Date, Date)"

标签 java date compiler-errors java-time java.util.date

如何计算用户先前从jXDatePicker swing组件中选择并已作为Date添加到该对象的对象的当前日期和日期之间的差异。

在最后一行的当前代码中,我收到以下错误消息:

no suitable method found for between(Date, Date)


Date currentDate = new Date();          
Date objDate = obj.getSelectedDate(); //getting date the user had 
                                      //previously selected and that been 
                                      //added to object      
long daysDifference = ChronoUnit.DAYS.between(objDate, currentDate);

最佳答案

您正在将旧的Date-Time代码与新的Java 8 Date-Time API混合在一起。 ChronoUnit.between(Temporal, Temporal)方法来自java.time.temporal包,该包带有两个Temporal对象。它不支持将java.util.Date作为参数,因此会导致编译错误。

可以使用Date类,而不是使用传统的java.time.LocalDate类,然后获取两个日期之间的差值。

LocalDate currentDate = LocalDate.now(ZoneId.systemDefault());
LocalDate objDate = obj.getSelectedDate();  // object should also store date as LocalDate
long daysDifference = ChronoUnit.DAYS.between(objDate, currentDate);

更新资料

根据您的注释,objDate只能是一个Date,因此在这种情况下,您可以使用Legacy Date -Time和Java 8 Date-Time类之间的互操作性。
LocalDateTime currentDate =  LocalDateTime.now(ZoneId.systemDefault());
Instant objIns = obj.getSelectedDate().toInstant();
LocalDateTime objDtTm = LocalDateTime.ofInstant(objIns, ZoneId.systemDefault());
long daysDifference = ChronoUnit.DAYS.between(objDtTm, currentDate);

更新2

正如Ole V.V在评论中指出的那样,要处理可能发生的时区问题,使用Instant计算差异是一种更好的方法。
Instant now = Instant.now();
long daysDifference = obj.getSelectedDate()
                         .toInstant()
                         .until(now, ChronoUnit.DAYS);

关于java - 尝试计算两个日期之间的天数差异时的“no suitable method found for between(Date, Date)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473169/

相关文章:

Mysql查询大表之间的日期

c++ - LNK2019未解析的外部符号。创建二叉树

java - 如何根据参数输入执行自定义查询

java - Groovy 能做 Java 能做的一切吗?

php - 将普通日期转换为 MySQL 日期格式

vba - 错误 400 消息 - 不知道如何解决公式

c++ - 奇怪的错误 : stray ‘\226’ in this program

java - 带参数的方法

java - 使用 Hibernate Criteria 连接不同列上的三个实体所需的帮助

php - 从数据库格式化日期?