如何在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)

但是我有天没找到?

编辑:我的导入是:

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

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

输出:

2020-10-01至2020-10-12之间为11天或0个月

Joda Time主页上写着:

请注意,Joda Time被认为是一个基本上"完成"的项目。没有计划进行重大改进。如果使用Java SE 8,请迁移到CCD_ 1(JSR-310(。

您的代码出了什么问题

但我有天没找到?

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

链接

  • Oracle教程:日期时间,解释如何使用java.Time
  • Joda Time Home

您不能将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)

相关内容

  • 没有找到相关文章

最新更新