1

需要根据 yyyyMMdd 格式化日期,下面的代码生成日期列表

import org.joda.time.LocalDate
import org.joda.time._

def getDates(startDate: String,endDate: String): Any = {
    val from = LocaDate.parse(startDate)
    val until = LocalDate.parse(endDate)
    val numberOfDays = Days.daysBetween(from, until).getDays()
    for (f<- 0 to numberOfDays) yield from.plusDays(f)
}

println(getDates("20200101","20200131"))

这将返回 -> Vector(2020-01-01,2020-01-31)

需要将返回的 Vector 转换为 List[String],其中元素的格式为“yyyyMMdd”

预期输出:列表(20200101,....,20200131)

4

1 回答 1

2

如果getDates()输入是 2 个字符串,而所需的输出是List[String],那么我真的看不出有任何理由使用旧的和过时的 Joda Time 库。该java.time库更新且功能齐全。

它还提供了该datesUntil()方法,该方法几乎可以满足您的要求,只是它返回 a java.util.stream.Stream,这有点麻烦,因为从 JavaStream到 Scala的转换List将取决于您正在运行的 Scala 版本。

例如,您可以在 Scala 2.13.x 中执行此操作:

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import scala.jdk.StreamConverters.StreamHasToScala

def getDates(startDate:String, endDate:String):List[String] = {
  val pattern = DateTimeFormatter.ofPattern("yyyyMMdd")
  LocalDate.parse(startDate, pattern)
           .datesUntil(LocalDate.parse(endDate, pattern).plusDays(1))
           .toScala(List)
           .map(_.format(pattern))
}

您会注意到没有检查有效的输入格式,因此这是用于演示而不是具有生产价值的代码。

于 2020-09-15T05:58:45.437 回答