Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestione delle date in Java

La gestione delle date in Java tramite la classe java.util.Calendar e java.text.SimpleDateFormat.
La gestione delle date in Java tramite la classe java.util.Calendar e java.text.SimpleDateFormat.
Link copiato negli appunti

Spesso capita di dover interagire con le date e le ore all'interno dei nostri programmi, come ad esempio stampare la data odierna in un determinato formato, calcolare il tempo che intercorre tra una data ed un'altra, confrontare due date, ed altro ancora. Purtroppo le date sono degli oggetti molto complessi da gestire, che assumono forme diverse a seconda del luogo geografico in cui ci troviamo o, semplicemente, a seconda del gusto di chi le deve trattare. E gli orari non sono certo da meno. In questo articolo analizziamo gli strumenti messi a disposizione da Java per gestire questi oggetti.

La classe principale messa a disposizione da Java per gestire le date e gli orari è java.util.Calendar. Fino alla versione 1.1 del JDK, la classe preposta al trattamento delle date era java.util.Date, ma in seguito, il suo utilizzo, è stato deprecato a favore di Calendar. La classe Date è rimasta per questioni di compatibilità, ma molti dei suoi metodi sono deprecati.

Calendar è una classe astratta, quindi non è possibile ottenere una sua istanza attraverso un costruttore. Per ottenere una sua istanza possiamo definire una sua sottoclasse oppure utilizzare i suoi metodi factory, come ad esempio il metodo getInstance(). Java mette a disposizione degli sviluppatori anche la classe GregorianCalendar, una classe concreta, sottoclasse di Calendar, che permette di effettuare tutte le operazioni possibili sulle date e sulle ore.

Poiché sarebbe impossibile analizzare tutte le proprietà e tutti i metodo di queste classi, riportiamo una serie di esempi che ci aiuteranno a prendere confidenza con tali classi:

Nel primo esempio stampiamo semplicemente la data odierna con l'orario attuale.

GregorianCalendar gc = new GregorianCalendar();
int anno = gc.get(Calendar.YEAR);
int mese = gc.get(Calendar.MONTH) + 1;
int giorno = gc.get(Calendar.DATE);
int ore = gc.get(Calendar.HOUR);
int min = gc.get(Calendar.MINUTE);
int sec = gc.get(Calendar.SECOND);

System.out.println(giorno + "/" + mese + "/" + anno + " " + ore + ":" + min + ":" + sec);

La classe GregorianCalendar è molto semplice da utilizzare. Sono disponibili diversi costruttori. Il costruttore senza parametri inizializza l'oggetto con la data e l'ora attuale. Mediante il metodo get(), ereditato da Calendar, è possibile ottenere tutte le informazioni disponibili.

Come è possibile notare, è molto semplice ottenere le informazioni che ci interessano, ma non è per nulla comodo effettuare visualizzazioni o semplici trasformazioni di formato delle date e delle ore. Per venire incontro agli svlippatori, Java ha messo a disposizione la classe java.text.SimpleDateFormat che permette di trattare con le date nel formato più adatto alla nostra esigenza.

Vediamo, nel prossimo esempio, come possiamo stampare la data odierna utilizzando la classe SimpleDateFormat:

GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss");
System.out.println(sdf.format(gc.getTime()));

Il costruttore della classe SimpleDateFormat prende in ingresso una stringa che rappresenta il formato della data che vogliamo stampare. Il metodo getTime della classe GregorianCalendar restituisce un'istanza della classe Date. Il metodo format della classe SimpleDateFormat, che riceve in ingresso una Date, ci restituisce una stringa che corrisponde al formato che abbiamo impostato.

È possible sfruttare la classe SimpleDateFormat anche per ottenere un'istanza della classe Calendar, vediamo come:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss");
String miaData = "01/02/1990";
GregorianCalendar c = new GregorianCalendar();
try{
c.setTime(sdf.parse(miaData));
}
catch (ParseException e){
e.printStackTrace();
}

Il metodo parse della classe SimpleDateFormat riceve in ingresso una stringa e restituisce un oggetto Date. Il metodo setTime della classe GregorianCalendar ci permette di impostare la data. Questa operazione potrebbe sollevare una ParseException, nel caso in cui la stringa passata al metodo parse(), non rappresenti una data convertibile.

Come ultimo esempio vediamo come convertire una data dal formato americano in quello italiano utilizzando le tecniche analizzate nei precedenti articoli.

SimpleDateFormat formatterIT = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat formatterEN = new SimpleDateFormat("yyyy/MM/dd");

Date dateIT;
try{
dateIT = formatterEN.parse("2007/04/05");
String dataEN = formatterIT.format(dateIT);
System.out.println(dataEN);
}
catch (ParseException e){
e.printStackTrace();
}

Ti consigliamo anche