如何在 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()
。您的 start
和 end
的类型为 Date
,消息的意思是 Scala 找不到接受两个 Date
参数的 daysBetween
方法。相反,您需要传递两个类型为 ReadableInstant
的对象(或 ReadablePartial
,但这是另一回事)。由于 Joda 自己的 DateTime
class 实现了 ReadableInstant
接口,您可以使用其他答案中显示的其中两个接口。
链接
- Oracle tutorial: Date Time 解释如何使用 java.time.
- Joda-Time Home
我试图获取两个给定日期之间的所有日期,但无法获取。
我试过这样
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()
。您的 start
和 end
的类型为 Date
,消息的意思是 Scala 找不到接受两个 Date
参数的 daysBetween
方法。相反,您需要传递两个类型为 ReadableInstant
的对象(或 ReadablePartial
,但这是另一回事)。由于 Joda 自己的 DateTime
class 实现了 ReadableInstant
接口,您可以使用其他答案中显示的其中两个接口。
链接
- Oracle tutorial: Date Time 解释如何使用 java.time.
- Joda-Time Home