scalaで関数を作成する必要があります。これにより、日付の範囲が与えられると、範囲のリストが表示されます。Scalaと私は比較的新しいです。同じための正しい 'for'ループを書く方法を理解することができません。これは私がこれまでに行ったことです:
def calculateDates(from: LocalDate, until: LocalDate): Seq[LocalDate] = {
var dateArray = []
//for (LocalDate date <- from; !date.isAfter(to); date <- date.plusDays(1))
for(date <- from to until)
{
dateArray :+ date
}
return dateArray
}
範囲を反復する方法がわかりません。
val numberOfDays = Days.daysBetween(from, until).getDays()
for (f<- 0 to numberOfDays) yield from.plusDays(f)
Java 1.8 DateTime
API(またはその1.7バックポートスリーテン)を使用する場合は、次のように記述できます。
def between(fromDate: LocalDate, toDate: LocalDate) = {
fromDate.toEpochDay.until(toDate.toEpochDay).map(LocalDate.ofEpochDay)
}
これを試して
def dateRange(start: DateTime, end: DateTime, step: Period): Iterator[DateTime] =
Iterator.iterate(start)(_.plus(step)).takeWhile(!_.isAfter(end))
すべての日付を生成するには、次のようにステップを1日に設定できます。
val range = dateRange(
<yourstartdate>,
<yourenddate>,
Period.days(1))
Java 9+
でScala
を実行すると、新しい Java.time.LocalDate::datesUntil
を利用できます。
import Java.time.LocalDate
import collection.JavaConverters._
// val start = LocalDate.of(2018, 9, 24)
// val end = LocalDate.of(2018, 9, 28)
start.datesUntil(end).iterator.asScala.toList
// List[LocalDate] = List(2018-09-24, 2018-09-25, 2018-09-26, 2018-09-27)
そして、範囲内の最後の日付を含めるには:
start.datesUntil(end.plusDays(1)).iterator.asScala.toList
// List[LocalDate] = List(2018-09-24, 2018-09-25, 2018-09-26, 2018-09-27, 2018-09-28)
使用 ラマ日付
$ scala -cp lamma_2.11-1.1.2.jar
Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import io.lamma.Date
import io.lamma.Date
scala> Date(2015, 7, 7) to Date(2015, 7, 10) foreach println
Date(2015,7,7)
Date(2015,7,8)
Date(2015,7,9)
Date(2015,7,10)
このDateRange
は怠惰な方法で評価されます。 5000年の日付範囲を自由に作成してください。 :)
Scalaは関数型なので、再帰を使用します。
def calculateDates(from: LocalDate, until: LocalDate): Seq[LocalDate] = {
if from.compareTo(until) > 1
return[]
else
return from :: calculateDates(from.plusDays(1), until)
}