Riapro il topic per sottoporvi un problema. Ho trovato molto utile questa funzione per un progetto a cui sto lavorando e l'ho lievemente modificata in modo da adattarla meglio alle mie esigenze. In parole povere, anziché passare tre interi, passo una stringa che rappresenta la data, effettuo il parsing attraverso un metodo ausiliario, dopodiché il metodo è lo stesso che ha postato andbin. Ecco quello che ho fatto.Originariamente inviato da andbin
Se si hanno 3 valori interi che contengono giorno/mese/anno (quindi nessuna stringa da "parsare"), validare la data è abbastanza semplice: si crea un GregorianCalendar con i 3 dati, si imposta il calendar in modo che non sia "lenient" e si prova a fare un get di un campo. Se i dati non sono corretti, viene lanciata la eccezione IllegalArgumentException.
Esempio:
codice:import java.util.*; public class Prova { public static void main (String[] args) { System.out.println (isDateValid (29, 2, 2007)); // false System.out.println (isDateValid (31, 11, 2007)); // false System.out.println (isDateValid (31, 12, 2007)); // true System.out.println (isDateValid (31, 13, 2007)); // false System.out.println (isDateValid (29, 2, 2008)); // true } public static boolean isDateValid (int day, int month, int year) { GregorianCalendar cal = new GregorianCalendar (year, month-1, day); cal.setLenient (false); try { cal.get (Calendar.DATE); return true; } catch (IllegalArgumentException e) { return false; } } }
Il problema è che il metodo ritorna sempre true. C'è qualcuno che mi sa dire perché?codice:import java.util.*; public class Test { public static GregorianCalendar parseDate(String date) { int[] parsed = new int[3]; int j = 0; String token = ""; for (int i = 0; i < date.length(); i++) { if (date.charAt(i) != '/') token += date.charAt(i); else { parsed[j++] = Integer.parseInt(token); token = ""; } } return new GregorianCalendar(parsed[2], parsed[1] - 1, parsed[0]); } public static boolean isValidDate(String date) { GregorianCalendar check = parseDate(date); check.setLenient(false); try { check.get(Calendar.DATE); return true; } catch (IllegalArgumentException e) { return false; } } public static void main(String[] args) { System.out.println("Inserisci una data nel formato dd/mm/yyyy: "); Scanner in = new Scanner(System.in); String date = in.nextLine(); if (isValidDate(date)) System.out.println("La data è corretta"); else System.out.println("La data non è corretta"); } }
Grazie in anticipo per l'attenzione![]()

Rispondi quotando