给定范围,在Scala中获取该范围内的所有日期

Cor*_*ped 11 loops scala date

我需要在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 
} 
Run Code Online (Sandbox Code Playgroud)

我不知道如何迭代范围.

san*_*ris 18

如果您碰巧使用Java 1.8 DateTimeAPI(或其1.7后向端口),那么您可以编写

def between(fromDate: LocalDate, toDate: LocalDate) = {
    fromDate.toEpochDay.until(toDate.toEpochDay).map(LocalDate.ofEpochDay)
} 
Run Code Online (Sandbox Code Playgroud)


Ash*_*ynd 16

val numberOfDays = Days.daysBetween(from, until).getDays()
for (f<- 0 to numberOfDays) yield from.plusDays(f)
Run Code Online (Sandbox Code Playgroud)

  • 'Days' 是 Scala 中的一个类吗? (2认同)

jes*_*ter 5

试试这个

def dateRange(start: DateTime, end: DateTime, step: Period): Iterator[DateTime] =
Iterator.iterate(start)(_.plus(step)).takeWhile(!_.isAfter(end))
Run Code Online (Sandbox Code Playgroud)

要生成每个日期,您可以将步骤设置为1天

val range = dateRange(
<yourstartdate>,
<yourenddate>,
Period.days(1))
Run Code Online (Sandbox Code Playgroud)


Xav*_*hot 5

在运行ScalaJava 9+,我们可以利用新的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)
Run Code Online (Sandbox Code Playgroud)

并包括范围内的最后日期:

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)
Run Code Online (Sandbox Code Playgroud)