Joda betweenDays(LocalDate,LocalDate)不适用

时间:2015-04-26 14:31:34

标签: java datetime jodatime java-time

我在使用Joda daysBetween函数时遇到问题。它一直告诉我

The method daysBetween(ReadableInstant, ReadableInstant) in the type Days is not applicable for the arguments (LocalDate, LocalDate)

当我尝试插入两个localdate项时。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
        LocalDate date = LocalDate.parse(reviewDate, formatter);
        Date dateNow = new Date();
        LocalDate date1 = LocalDate.parse(dateNow.toString(),formatter);
        int days = Days.daysBetween(date,date1).getDays();

我想知道reviewDate和当前日期date1之间的天数我做错了什么?

2 个答案:

答案 0 :(得分:3)

你说的是Joda-Time-class org.joda.time.LocalDate。当然,表达式Days.daysBetween(ReadablePartial,ReadablePartial)可以process such an input without problems,但你有问题吗?!这让我觉得你的进口可能是错的。事实上:

您也可以使用以下表达式:

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);

但该代码不是Joda代码,而是Java-8代码。因此,您显然会将不同的类org.joda.time.LocalDatejava.time.LocalDate混淆。这就是你的编译器所抱怨的。不要混合两个库。它们不兼容,部分相同的名称也无济于事,但会增加混淆。

解决方案:完全放弃Joda-Time,因为您使用的是Java-8。您可以使用以下Days.daysBetween(...)代替:

long days = ChronoUnit.DAYS.between(date, date1);

答案 1 :(得分:2)

您应该使用以下方法之一将LocalDate转换为DateTime

LocalDate::toDateTimeAtCurrentTime()
LocalDate::toDateTimeAtStartOfDay()
LocalDate::toDateTime( LocalTime )
LocalDate::toDateTime( LocalTime , DateTimeZone )

然后您将DateTime传递给daysBetween()方法。