david hol david hol - 3 months ago 45
Scala Question

Scala how to get LocalDate by pattern

I try to get

LocaDate
by format so i took this function that receive date and search for format to parse:

def getLocalDate(date: String): LocalDate = {

val pattern1 = DateTimeFormatter.ofPattern("dd MMM, yyyy")
val pattern2 = DateTimeFormatter.ofPattern("dd MMM yyyy")
val pattern3 = DateTimeFormatter.ofPattern("yyyy-MMM-dd")
val pattern4 = DateTimeFormatter.ofPattern("dd/MM/YYYY")
val pattern5 = DateTimeFormatter.ISO_LOCAL_DATE

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

result.get
}


Usage:

var s1 = "01/08/2010"
getLocalDate(s1)


But got an error:

java.time.format.DateTimeParseException: Text '01/08/2010' could not be parsed at index 0


And i don;t know why and what goes wrong.

Answer
import java.time.LocalDate
import java.time.format.DateTimeFormatter

import scala.util.Try

def getLocalDate(date: String): java.time.LocalDate = {
  val pattern1 = DateTimeFormatter.ofPattern("dd MMM, yyyy")
  val pattern2 = DateTimeFormatter.ofPattern("dd MMM yyyy")
  val pattern3 = DateTimeFormatter.ofPattern("yyyy-MMM-dd")
  val pattern4 = DateTimeFormatter.ofPattern("dd/MM/yyyy")
  val pattern5 = DateTimeFormatter.ISO_LOCAL_DATE

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

  result.get
}
var s1 = "01/08/2010"
getLocalDate(s1)

This works nicely in REPL (Scala 2.11.8, Java 1.8).

Your mistake was to include "YYYY" in last pattern instead of "yyyy". Also, take a look at package nscala-time. Maybe it will provide better bindings for your applications.

Comments