2016-07-27 10 views
-2

diese Funktion Bitte beachten Sie, dass String in LocalDate konvertieren:Scala generisches Format konvertieren determain

def getLocalDate(date: String): LocalDate = { 

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

Verbrauch:

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

Also, falls ich habe Datum mit anderem Format:

val date = "01 Jan, 2010" 

Ist es möglich, meine Funktion zu aktivieren, um mehrere Formate anstelle von suppo zu unterstützen? rt nur 1?

+0

Es gibt unendlich viele Formate. Woher weiß es Ihr Format für diese Zeichenfolge? Sie müssen das Format übergeben. – waltersu

Antwort

1

Betrachten Anrufe parse mit scala.util.Try

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 wirft DateTimeParseException verketten, wenn nicht in der Lage eine Zeichenfolge zu analysieren. Man kann es fangen und es mit einem anderen Muster versuchen.

Nach jedem Schritt ist der zurückgegebene Wert ein Erfolg oder ein Fehler. Im Erfolgsfall werden nachfolgende Wiederherstellungen ignoriert.

nennen Schließlich getLocalDate enthalten in Success oder rethrow Ausnahme von Failure gefangen zurückzukehren.

+0

Was bedeutet dieses ISO_LOCAL_DATE in Muster3? –

+0

Es ist als Beispielmuster gemeint. Werfen Sie einen Blick auf https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html Abschnitt "Vordefinierte Formatierer" –

+0

Kann ich ein anderes Format hinzufügen, zum Beispiel JJJJ-MM-TT - -> 2016-01-06? –