如何解决解析日期列表以在Scala中列出字符串
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))
}
您会注意到,没有检查有效的输入格式,因此这只是用于演示,而不是可用于生产的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。