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

How to get number of days between two given dates in Scala

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

我试过这样

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)

但是我找不到 daysBetween?

编辑:我的导入是:

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Months;

您不能混合使用 java 时间和 joda 时间。也使用 joda 创建日期时间。

import org.joda.time.format.DateTimeFormat
import org.joda.time.{Days,Months}

val formatter = DateTimeFormat.forPattern("yyyy-MM-dd")
var start = formatter.parseDateTime("2020-10-01")
var end = formatter.parseDateTime("2020-10-12")

val days = Days.daysBetween(start, end)
val months = Months.monthsBetween(start, end)

java.time

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

import java.time.temporal.ChronoUnit;
import java.time.LocalDate;

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);

输出:

Between 2020-10-01 and 2020-10-12 are 11 days or 0 months

Joda-Time 主页说:

Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).

你的代码出了什么问题?

But i am getting daysBetween not found?

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

链接