问题描述
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"))
这将返回->向量(2020-01-01,2020-01-31)
需要将返回的Vector转换为List [String],其中元素的格式为“ yyyyMMdd”
预期输出:列表(20200101,....,20200131)
解决方法
如果getDates()
输入是2个字符串,而期望的输出是List[String]
,那么我真的看不到有任何理由使用旧的和过时的Joda Time库。 java.time
库是较新的并且功能齐全。
它还提供了datesUntil()
方法,该方法几乎可以完成您想要的任何事情,除了它返回一个java.util.stream.Stream
之外,这很痛苦,因为从Java Stream
过渡升级至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))
}
您会注意到,没有检查有效的输入格式,因此这只是用于演示,而不是可用于生产的代码。