Wie um zu überprüfen, ob Zeichenfolge Datum, Muster, Zeit mit API?

Mein Programm ist das Parsen einer Eingabezeichenfolge auf eine LocalDate Objekt. Für die meisten der Zeit, die die Zeichenfolge sieht aus wie 30.03.2014, aber gelegentlich sieht es aus wie 3/30/2014. Je nach dem, ich muss eine andere Muster zu nennen DateTimeFormatter.ofPattern(String pattern) mit. Grundsätzlich, ich brauche, um zu überprüfen, ob der string dem Muster entspricht dd.MM.yyyy oder M/dd/yyyy vor der Analyse.

Der regex-Ansatz wäre so etwas wie:

LocalDate date;
if (dateString.matches("^\\d?\\d/\\d{2}/\\d{4}$")) {
  date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("M/dd/yyyy"));  
} else {
  date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("dd.MM.yyyy"));  
}

Dies funktioniert, aber es wäre schön, um das Datum Muster-Zeichenfolge, wenn passende string auch.

Gibt es irgendwelche standard-Möglichkeiten, dies zu tun mit die neue Java 8 Zeit-API, ohne auf regex-matching? Ich habe mir in den docs für DateTimeFormatter aber ich konnte nichts finden.

  • Warum nicht ein string replace("//", ".") ?
  • Ich glaube nicht, dass es eine bestimmte Methode, um zu überprüfen, ob ein Datum folgt einem bestimmten Muster. Ich würde das " = SimpleDateFormat.Analyse-Methode, und überprüfen Sie für eine ParseException. Wenn Sie sicher sind, dass das Datum korrekt ist, und es ist in einem der beiden Muster, können Sie einfach überprüfen, ob es ist". " im string.
  • Weil Monat und Tag sind nicht in der gleichen Stelle in beiden mustern.
  • Ich bin nicht dieses posting als eine Antwort, denn ich weiß nicht, ob es eine praktikable option für Sie, eine Klasse zu erstellen, die für dieser. Ist es? Wie dieses: tryjava8.com/app/snippets/5368a343e4b0753f2af0f806
  • Die Klasse SimpleDateFormat können nicht direkt analysiert, um einen LocalDate nur zu java.util.Date das ist ganz anders.
  • Das ist eine mögliche Lösung, wenn keine andere Lösung existiert bereits. Bitte poste es als Antwort sowieso. BTW, die Website, die Sie verlinkt konnte, wenn ich ran die Beispiel.
  • Schauen Sie auf meine aktualisierte Antwort, es ist vielleicht einfacher als das erstellen einer Klasse für das.
  • Danke, das ist eine schöne Lösung.

InformationsquelleAutor | 2014-05-06
Schreibe einen Kommentar