2016-07-27 1 views
-2

S'il vous plaît voir cette fonction qui convertissent String en LocalDate:Scala format générique convertir determain

def getLocalDate(date: String): LocalDate = { 

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

Utilisation:

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

Donc, au cas où j'ai jour avec format différent:

val date = "01 Jan, 2010" 

Est-il possible d'activer ma fonction pour supporter plusieurs formats au lieu de suppo RT seulement 1?

+0

Il existe des formats infinis. Comment sait-il votre format pour cette chaîne? Vous devez transmettre le format. – waltersu

Répondre

1

Tenir compte des appels à enchaînant parse utilisant 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 lancers francs DateTimeParseException lorsqu'il est incapable d'analyser une chaîne. On peut l'attraper et essayer à nouveau avec un autre motif. Après chaque étape retournée, la valeur est un succès ou un échec. En cas de réussite, les récupérations suivantes sont ignorées.

Enfin, appelez get pour renvoyer LocalDate contenu dans Success ou de relancer l'exception capturée par Failure.

+0

Que signifie ce ISO_LOCAL_DATE dans pattern3? –

+0

C'est un exemple de modèle. Jetez un oeil à https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html section "Formateurs prédéfinis" –

+0

Puis-je ajouter d'autres formats par exemple aaaa-MM-jj - -> 2016-01-06? –