2016-08-03 15 views
1

Ich versuche LocaDate von Format zu bekommen, so dass ich diese Funktion nahm das Datum erhalten und für Format suchen, um zu analysieren:Scala wie LOCALDATE zu erhalten, indem Muster

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 
    } 

Verbrauch:

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

Aber bekamen ein Fehler:

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

Und ich weiß nicht, warum und was schief geht.

+0

Ich weiß nicht scala, aber es scheint, dass Sie jeden LocalDate.parse-Aufruf in einem try Block umbrechen müssen. –

+3

Ich nehme an, dass Ihr Beispieldatum "01/08/2010" mit Muster 4 übereinstimmen sollte, aber es verwendet Großbuchstaben 'YYYY' anstelle von' yyyy'. – devkat

+0

Gleicher Fehler mit YYYY oder yyyy –

Antwort

3
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) 

Dies funktioniert gut in REPL (Scala 2.11.8, Java 1.8).

Ihr Fehler war, "YYYY" im letzten Muster statt "yyyy" einzuschließen. Werfen Sie auch einen Blick auf Paket nscala-Zeit. Vielleicht bietet es bessere Bindungen für Ihre Anwendungen.