Meine Anforderung ist zu validieren, dass ein Datum String im richtigen Format basierend auf einer Reihe von gültigen Formaten angegeben ist.Java 8 DateTimeFormatterBuilder(). AppendOptional funktioniert nicht
Gültige Formate:
MM/dd/yy
MM/dd/yyyy
habe ich ein einfaches Testverfahren, die die Java 8 DateTimeFormatterBuilder verwendet eine flexible Formatierungsprogramm zu erstellen, die mehrere optionale Formate unterstützt. Hier ist der Code:
public static void test() {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy"))
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yyyy"))
.toFormatter();
String dateString = "10/30/2017";
try {
LocalDate.parse(dateString, formatter);
System.out.println(dateString + " has a valid date format");
} catch (Exception e) {
System.out.println(dateString + " has an invalid date format");
}
}
Als ich das laufen, hier ist der Ausgang
10/30/2017 has an invalid date format
Wie Sie im Code zu sehen, die die gültigen Datumsformate MM/TT/JJ und MM/dd/JJJJ. Meine Erwartung war, dass das Datum 30.10.2017 gültig sein sollte, da es MM/TT/JJJJ entspricht. Der 30.10.2017 wird jedoch als ungültig gemeldet.
Was läuft falsch? Warum funktioniert das nicht?
Ich habe auch versucht
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy[yy]"))
anstelle von
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy"))
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yyyy"))
hatte aber immer noch das gleiche Problem.
Dieser Code läuft wie erwartet, wenn ich benutze:
String dateString = "10/30/17";
anstelle von
String dateString = "10/30/2017";
Ich habe 2 Fragen
Was falsch ist hier los? Warum funktioniert es nicht für "30.10.2017"?
Wie kann mit Java 8 ein flexibler Date-Formatierer (ein Formatierer, der mehrere optionale Formate unterstützt) korrekt erstellt werden? Ich kenne die Verwendung von [], um optionale Abschnitte in der Musterzeichenfolge selbst zu erstellen. Ich bin auf der Suche nach etwas ähnlich zu dem, was ich versuche, ([] in der Musterkette zu vermeiden und mit separaten optionalen Klauseln für jedes einzelnes Formatstring)
Das ist nicht wie 'appendOptional()' soll verwendet werden (bitte siehe meine Antwort unten). Um ein anderes Format für das Datum zu ermöglichen, erstellen Sie am einfachsten eine Formatierungsliste, aber ich bin mir nicht sicher, ob dies der beste Weg ist. –