如何在Scala中获取两个给定日期之间的天数

Dev*_*Dev 0 scala date days jodatime

我试图获取两个给定日期之间的所有日期,但无法获取。

我试过这样。

val dateformat = new SimpleDateFormat("yyyy-MM-dd")
var start = dateformat.parse("2020-10-01")
var end = dateformat.parse("2020-10-12")

val days = Days.daysBetween(start, end)
val months = Months.monthsBetween(start, end)
Run Code Online (Sandbox Code Playgroud)

但我得到了 daysBetween 未找到?

编辑:我的进口是:

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Months;
Run Code Online (Sandbox Code Playgroud)

Ole*_*.V. 5

时间

为了完整起见,这里是相同代码的 java.time 版本。java.time 是现代 Java 日期和时间 API,是 Joda-Time 的继承者。不过,您必须自己翻译我的 Java 代码。

    LocalDate start = LocalDate.parse("2020-10-01");
    LocalDate end = LocalDate.parse("2020-10-12");

    long days = ChronoUnit.DAYS.between(start, end);
    long months = ChronoUnit.MONTHS.between(start, end);
    
    System.out.format("Between %s and %s are %d days or %d months%n",
            start, end, days, months);
Run Code Online (Sandbox Code Playgroud)

输出:

2020-10-01 和 2020-10-12 之间是 11 天或 0 个月

Joda-Time 主页说:

请注意,Joda-Time 被认为是一个很大程度上“已完成”的项目。没有计划进行重大改进。如果使用 Java SE 8,请迁移到java.time(JSR-310)。

你的代码出了什么问题?

但我得到了 daysBetween 未找到?

并不是 Scala 找不到Days.daysBetween(). 您的startandend有 type Date,消息的意思是 Scala 找不到daysBetween接受两个Date参数的方法。相反,您需要传递两个类型为ReadableInstant(或ReadablePartial,但那是另一回事)的对象。由于 Joda 自己的DateTime类实现了该ReadableInstant接口,因此您可以使用其中两个,如另一个答案中所示。

链接