微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析日期列表以在Scala中列出字符串

如何解决解析日期列表以在Scala中列出字符串

需要根据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"))

这将返回->向量(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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?