在Scala中转换日期格式

5
我正在尝试将这种格式的日期转换成Scala中的20110930: 2011-09-30 00:00:00.0。 有人有什么想法吗?

请看一下 java.text.DateFormat - Brian
但我能写一些代码来实现这个吗?我正在尝试将其添加到一个脚本中,最终将搜索我的日期的最小值和最大值。 - CaroV1x3n
1
是的。实际上,使用SimpleDateFormat看起来更好。您将创建一个SimpleDateFormat类,传递表示日期格式的模式,解析它,然后可以将每个日期转换为毫秒以查找最小值和最大值。 - Brian
你不需要将多个日期使用 format() 方法转换成统一的 String 格式以便比较它们并找到最小值或最大值。在解析输入字符串后,你可以直接对 Date 元素执行这些操作。 - jwvh
3个回答

6
请使用类似以下的内容:
import java.text.SimpleDateFormat

val inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S")
val outputFormat = new SimpleDateFormat("ddMMyyyy")

val date = "2015-01-31 12:34:00.0"
val formattedDate = outputFormat.format(inputFormat.parse(date))

println(formattedDate) //20150131

5
如果您只想将日期格式从字符串更改为字符串,可以执行类似以下的操作:
def toSimpleDate(dateString: String): Option[String] = {
  val parser = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")
  val formatter = DateTimeFormatter.ofPattern("yyyyMMdd")

  Try {
    LocalDateTime.parse(dateString, parser)
  }.toOption
    .map(_.format(formatter))
}

toSimpleDate("2011-09-30 00:00:00.0") // Some("20119030")
toSimpleDate("Meh") // None

2

您可能可以使用其他答案中提到的日期函数。不过,如果您确定格式为 2011-09-30 00:00:00.0,那么一个简单的映射操作应该就足够了。

val x = List("2011-09-30 00:00:00.0")
val output = x map (x => x.dropRight(11).replace("-",""))
> output: List[String] = List(20110930)

然而,此解决方案仅在您能保证输入以相同格式提供时才有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接