Buongiorno, qualcuno può indicarmi del codice JAVA per inserire la data in un form obbligatoriamente nel formato "dd/mm/aaaa" e poi controllare se è stata scritta nel formato corretto?
Grazie![]()
Buongiorno, qualcuno può indicarmi del codice JAVA per inserire la data in un form obbligatoriamente nel formato "dd/mm/aaaa" e poi controllare se è stata scritta nel formato corretto?
Grazie![]()
up
Dunque...
Immagino che il form che intendi tu sia un form HTML, quindi di conseguenza utilizzi le JSP mischiando codice HTML e codice JAVA.
Il codice Java di una JSP lavora "lato server", quindi in questo modo non puoi obbligare l'utente ad inserire la data nel formato che vuoi tu senza inviare le informazioni al server e quindi ricaricare la pagina.
* Se per te non e' un problema ricaricare la pagina ogni volta, puoi catturare la stringa dalla request e successivamente controllare che sia nel formato che ti interessa (attenzione che se non tieni traccia di tutte le informazioni inviate tramite il form, queste andranno perse e l'utente dovrà ogni volta inserirle finché la data non sarà insertita nel modo corretto).
* Se invece vuoi che l'utente abbia un feedback immediato sulla validità o meno della data nel momento in cui la inserisce dovresti utilizzare Javascript che lavora lato client e quindi non necessita dell'invio delle informazioni al server con conseguente ricaricamento della pagina.
il form è un jTextField, e il tutto non è su server, ovvero non è un'applicazione che deve girare sul web, ma in stand-alone.
Ok quindi stai sviluppando un'applicazione con swing.. diventa tutto più semplice (in parte.. in parte no eheh)
Allora:
Al verificarsi di un determinato evento (immagino sia il click su un bottone salva, ma non ha molta importanza) salvi il contenuto della jTextField in una stringa.
Utilizzando il metodo split proprio delle stringhe puoi spezzare la stringa in base ad un'espressione a tua scelta (nel tuo caso sarà "/")
Dopodiché devi controllare se i vari pezzi sono dei numeri, se hanno la lunghezza giusta ecc..
Dopodiché crei un GregorianCalendar con i dati che hai ricavato e tramite il metodo getTime() ti fai restituire la data corretta.
Ti posto un pezzo di codice che ho ancora usato per applicazioni di questo tipo, (io ho catturato la stringa da un JoptionPane):
Attenzione alla gestione delle eccezioni le quali possono essere :codice:String data = JOptionPane.showInputDialog("Inserisci la data nel formato gg/mm/aaaa : "); String pezziDiData[] = data.split("/"); int giorno = -1; int mese = -1; int anno = -1; try { if (pezziDiData[0].length() == 2) giorno = Integer.parseInt(pezziDiData[0]); if (pezziDiData[1].length() == 2) mese = Integer.parseInt(pezziDiData[1]); if (pezziDiData[2].length() == 4) anno = Integer.parseInt(pezziDiData[2]); /* I mesi per GregorianCalendar partono da 0*/ GregorianCalendar c = new GregorianCalendar(anno , mese-1, giorno); System.out.println("Data : " + c.getTime()); } catch(Exception ex) { ex.printStackTrace(); }
* NumberFormatException: nel caso in cui l'utente inserisca dei caratteri alfabetici al posto dei numeri.
* ArrayOutOfBoundException nel caso in cui l'utente non abbia separato i vari pezzi di data con /
Inoltre dovresti fare dei controlli sui numeri in quanto per adesso il programma controlla che siano numeri, che abbiano la lunghezza giusta, ma non controlla i valori. In questo modo l'utente può inserire un mese 99 e il programma non ti avvisa
Fammi sapere se hai dubbi ..
Mastico da poco java/swing, se potresti farmi un esempio più pratico... Tipo se devo crearmi un'altra classe con questi parametri...codice:String data = JOptionPane.showInputDialog("Inserisci la data nel formato gg/mm/aaaa : "); String pezziDiData[] = data.split("/"); int giorno = -1; int mese = -1; int anno = -1; try { if (pezziDiData[0].length() == 2) giorno = Integer.parseInt(pezziDiData[0]); if (pezziDiData[1].length() == 2) mese = Integer.parseInt(pezziDiData[1]); if (pezziDiData[2].length() == 4) anno = Integer.parseInt(pezziDiData[2]); /* I mesi per GregorianCalendar partono da 0*/ GregorianCalendar c = new GregorianCalendar(anno , mese-1, giorno); System.out.println("Data : " + c.getTime()); } catch(Exception ex) { ex.printStackTrace(); }
Se tu prendi il codice che ti ho postato e lo copi/incolli all'interno del metodo main di una tua classe Main funziona perfettamente.
(Ricordati che devi effettuare l'import delle classi che vengono utilizzate)
Originariamente inviato da sbiell0
Se tu prendi il codice che ti ho postato e lo copi/incolli all'interno del metodo main di una tua classe Main funziona perfettamente.
(Ricordati che devi effettuare l'import delle classi che vengono utilizzate)
Grazie, adesso ci lavoro su![]()