Il mio programma sta analizzando una stringa di input su un oggetto LocalDate
. Per la maggior parte del tempo la stringa assomiglia a 30.03.2014
, ma a volte sembra che sia 3/30/2014
. A seconda di quale, ho bisogno di utilizzare un modello diverso per chiamare DateTimeFormatter.ofPattern(String pattern)
con. Fondamentalmente, ho bisogno di verificare se la stringa corrisponde al modello dd.MM.yyyy
o M/dd/yyyy
prima di eseguire l'analisi.Come verificare se la stringa corrisponde al modello di data utilizzando l'API del tempo?
L'approccio regex sarebbe qualcosa di simile:
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"));
}
Questo funziona, ma sarebbe bello usare la stringa della data modello quando corrisponde alla stringa anche.
Esistono modi standard per eseguire questa operazione con la nuova API Java 8 time, senza ricorrere alla corrispondenza delle espressioni regolari? Ho esaminato i documenti per DateTimeFormatter
ma non sono riuscito a trovare nulla.
Perché non stringa 'replace (" // ",". ")'? –
Non penso che esista un metodo specifico per verificare se una data segue un dato pattern. Vorrei utilizzare il metodo SimpleDateFormat.parse e verificare una ParseException. Se sei sicuro che la data sia corretta ed è in uno dei due modelli, puoi semplicemente controllare se c'è "." nella stringa. – maxvv
@RobertNiestroj Perché mese e giorno non sono posizionati nello stesso posto in entrambi i modelli. –