Scala 通用格式转换确定

Scala generic format convert determain

请查看将 String 转换为 LocalDate 的函数:

  def getLocalDate(date: String): LocalDate = {

    LocalDate.parse(date, format.DateTimeFormatter.ofPattern("dd MMM, yyyy"))
  }

用法:

val date = "01 Jan, 2010"
val localDate = getLocalDate(date)

所以如果我有不同格式的日期:

val date  = "01 Jan, 2010"

是否可以让我的函数支持多种格式而不是只支持一种格式?

考虑使用 scala.util.Try

链接对 parse 的调用
def getLocalDate(date: String): LocalDate = {
  val pattern1 = DateTimeFormatter.ofPattern("dd MMM, yyyy")
  val pattern2 = DateTimeFormatter.ofPattern("dd MMM yyyy")
  val pattern3 = DateTimeFormatter.ISO_LOCAL_DATE

  val result = Try {
    LocalDate.parse(date, pattern1)
  } recover {
    case _ => LocalDate.parse(date, pattern2)
  } recover {
    case _ => LocalDate.parse(date, pattern3)
  }

  result.get
}

parse 在无法解析字符串时抛出 DateTimeParseException。人们可以抓住它并用另一种模式再试一次。

在每个步骤之后 returned 值是成功或失败。如果成功,则忽略以下恢复。

最终调用 getSuccess 中包含的 return LocalDate 或重新抛出被 Failure.

捕获的异常