2016-11-14 5 views
1

Ich habe den folgenden Code ein Datum angegebenen Datumsformat zu bestätigen:Get Jahr, Monat und Tag ab analysiert Datum

val df = new SimpleDateFormat("MM/dd/yyyy"); 
df.setLenient(false); 

try { 
    val date = df.parse("11/13/2014"); 
} 
catch { 
    case pe: ParseException => println("date error") 
} 

Nun, was ich brauche, ist das Jahr, den Monat und den Tag in drei Variablen zu erhalten . Was ist der beste Weg, dies zu erreichen? Beachten Sie, dass ich eine auf Leistung basierende Lösung benötige, da ich tausende von Daten validieren/konvertieren muss.

+2

Einfach gezeigt ... gehen Lesen Sie die Dokumentation für die Date API. Probieren Sie es aus und fragen Sie hier, ob Sie noch Probleme haben. –

+0

es sagt, dass getYear veraltet ist, deshalb fragte ich – ps0604

+2

Ich würde joda-time oder java.time in jedem Fall verwenden. – Reactormonk

Antwort

3

java.time

Verwenden Java 8 und das neue Datum/Zeit-API. Besser, sauberer, zukunftssicher.

val dateFormat = "MM/dd/yyyy" 
val dtf = java.time.format.DateTimeFormatter.ofPattern(dateFormat) 
val dateString = "11/13/2014" 
val d = java.time.LocalDate.parse(dateString, dtf) 
val year = d.getYear 
val monthNumber = d.getMonthValue 

Sie ein Month Objekt Enum zugreifen können.

val month = d.getMonth 

Month.NOVEMBER

val dayOfMonth = d.getDayOfMonth 

Sobald Sie die Eingabe in ein java.time.LocalDate analysiert haben, können Sie das Jahr mit getYear bekommen, usw.

Um zu validieren, fangen Sie die DateTimeParseException für ungültige Eingaben generiert.

Wenn Sie die richtige Datum Validierung überspringen (zB für die Leistung) und extrahieren nur den Y, M, D - Sie die Zeichenfolge aufteilen und ganze Zahlen erhalten, wie unten

val ymd = dateString.split("/").map(_.toInt) 
ymd: Array[Int] = Array(11, 13, 2014) 
+0

Was ist der Sinn von * Parsing * ein 'LocalDate', wenn Sie dann nur die Zeichenfolge teilen? Verwenden Sie stattdessen "LocalDate" -Methoden: ['d.getYear'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#getYear--), [' d. getMonthValue'] (https://docs.oracle.com/javase/8/docs/api/java/zeit/LocalDate.html # getMonthValue--) usw. – laughedelic

+1

OP erwähnt "Validierung". Parsen es als ein Datum ist die ultimative Validierung, dass es ein Datum ist, nicht nur Schrägstrich-getrennte ganze Zahlen (z. B. "65/82/1314"). OP ist frei, so wenig/so viel Lösung wie nötig zu verwenden – radumanolescu

+0

Er sagt: "Nun, was ich brauche ist, um Jahr, Monat und Tag in drei Variablen zu erhalten". – laughedelic

Verwandte Themen