20
Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Embed Size (px)

Citation preview

Page 1: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Le date in java

Date, Calendar, GregorianCalendar,SimpleDateFormat

Page 2: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

classi obsolete

• la classe Date è obsoleta.. è stata sostituita dalla classe astratta Calendar

• Possiamo utilizzare una classe derivata da Calendar, la

GregorianCalendar• le date è un tipo di dato molto complesso,

non deve quindi stupire che ci siano state storicamente delle classi che ora non vengono più usate

Page 3: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

GregorianCalendar()

Utilizzando il costruttore senza parametri si ottiene un oggetto che contiene tutti i parametri relativi al momento attuale, dall’anno (che può essere bisestile o no) al millisecondo

GregorianCalendar data = new GregorianCalendar()

Legge la data e l’ora della macchina e la ripropone secondo il fuso orario di sistema.

Page 4: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Come leggere la data

• Esiste il metodo get( ) che ha come parametro un intero.

• La classe GregorianCalendar eredita da Calendar numerose costanti, che possono essere utilizzate con il metodo get

• Esempio:

data.get(GregorianCalendar.YEAR)

restituirà l’anno della data (es: 1985)

Page 5: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Come leggere la data con .get(..)

in particolare:• Calendar.YEAR anno• Calendar.MONTH mese, ma attenzione

parte da 0=gennaio, 11=dicembre!!

• Calendar.DATE o Calendar.DAY_OF_MONTH giorno del mese (da 1 a 31)

Page 6: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Come leggere la data con .get(..)

• Calendar.DAY_OF_WEEK giorno della settimana, attenzione: 1= domenica, 2=lunedì, …. 7=sabato

• Calendar.DAY_OF_YEAR giorno del’anno da 1 a 365 (o 366 se l’anno è bisestile)per sapere se un anno è bisestile si può usare il metodo di un qualsiasi oggetto di classe Calendar

.isLeapYear( anno )

Page 7: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Leggere l’ora con .get( )

• Calendar.HOURS ora compresa tra 0 e 11:• Calendar.AM_PM restituisce 0=am e 1=pm

• Calendar.HOUR_OF_DAY ora compresa tra 0 e 23

• Calendar.MINUTE minuti da 0 a 59• Calendar.SECOND secondi da 0 a 59

• Calendar.MILLISECOND millisecondi (0- 999)

Page 8: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Costruire una data

• Abbiamo visto che il costruttore vuoto crea un oggetto data con i valori del momento

• Volendo creare una data qualsiasi è sufficiente utilizzare il costruttore con alcuni argomenti (3,5 o 6 interi)

GregorianCalendar gc = new GregorianCalendar(anno, mese, giorno)GregorianCalendar gc = new

GregorianCalendar(anno, mese, giorno, ora, minuti)GregorianCalendar gc = new GregorianCalendar(anno, mese, giorno, ora,

minuti, secondi)

ATTENZIONE: il mese è sempre compreso tra 0 e 11 !!Per non confondersi si possono usare le costanti Calendar.JANUARY, Calendar. FEBRUARY, ecc.

Page 9: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Altri metodi

• .getTime( ) resituisce un ogetto Date, se si prova a stamparlo si ottiene una stringa tipo

Thu Jan 31 18:30:24 CET 2013

• .getTimeInMillis( ) restituisce un intero (long) che esprime la data in millisecondi

Page 10: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Confronto tra date

• data1.after( data2 ) data1 < data2• data1.equals( data2 ) data1 = data2• data1.before( data2 ) data1 > data2

• nota: se inserisco solo la data si intende alle ore 00:00.0

Page 11: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Classe SimpleDateFormat

• La classe SimpleDateFormat nasce per semplificare l’utilizzo della data, risolvendo alcuni problemi riguardanti l’input e l’output

• In pratica questo oggetto permette di gestire date espresse con nomi di mesi o di giorni

• Nel costruttore si definisce il modello, utilizzando delle convenzioni. Es:

SimpleDateFormat formato = new SimpleDateFormat("EEEE d MMMM yyyy HH:mm.ss")

Page 12: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Classe SimpleDateFormat

• d o D esprime il numero del giorno del mese (0-31 o 00-31 con dd)

• M esprime il mese: M: 1-12, MM: 01-12MMM: gen-dic MMMM: gennaio-dicembre

• y esprime l’anno con due cifre

• yyyy esprime l’anno con quattro cifre

Page 13: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Classe SimpleDateFormat

• E esprime il giorno della settimana con 3 lettere (dom, lun, …)

• EEEE esprime il giorno della settimanadomenica, lunedì, …

• w settimana nell’anno 1-52, ww:01-52

• W settimana nel mese 1-6

Page 14: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Classe SimpleDateFormat

• h esprime l’ora 1-12 hh: 01-12• H esprime l’ora 0-23 hh: 00-23• k esprime l’ora 1-24 kk: 01-24• K esprime l’ora 0-11 KK: 00-11• m esprime i minuti 0-59, mm:00-59• s esprime i secondi 0-59, ss:00-59• S esprime i millisecondi SSS• a esprime AM o PM

Page 15: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Stampiamo la data col formato• definire il formato ( costruttore della classe SimpleDateFormat)• creare una data (costruttore della classe GregorianCalendar)• utiliziamo il formato (metodo format dell’oggetto di classe

SimpleDateFormat che vuole come parametro un oggetto di classe Date• Per avere un oggetto di classe Date occorre utilizzare il metodo getTime

dell’oggetto di classe GregorianCalendar

SimpleDateFormat formato = new SimpleDateFormat("EEEE d MMMM yyyy HH:mm.ss");

GregorianCalendar adesso = new

GregorianCalendar(2007,3,2,2,45,7); System.out.println( formato.format( adesso.getTime() ));

stamperà a video: lunedì 2 aprile 2007 02:45.07

Page 16: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Acquisizione di una data

• La classe SimpleDateFormat espone un comodo metodo .parse( s ) che riceve una stringa di testo e restituisce un oggetto di tipo Date.

• volendo poi convertire una data dal tipo Date a Calendar, esiste il metodo setTime di Calendar al quale può ricevere direttamente il tipo Date

Page 17: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

EsempioString sFormato = "EEEE d MMMM yyyy HH:mm.ss";String sDataScritta = "mercoledì 30 marzo 2013

13:32.00"; SimpleDateFormat objFormato = new

SimpleDateFormat(sFormato); Date dataClasseDate =

objFormato.parse(sDataScritta); GregorianCalendar dataClasseGC = new

GregorianCalendar();dataClasseGC.setTime(dataClasseDate);

Page 18: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Aggiungere o sottrarre alle date

usando GregorianCalendar• esiste il metodo add( cheCosa, quantità )• questo metodo non restituisce nulla, ma lavora

sulla data• in cheCosa si possono utilizzare le costanti della

classe Calendar già viste• quantità può essere positiva o negativaGregorianCalendar oggi = new GregorianCalendar();GregorianCalendar tra2giorni = new

GregorianCalendar();tra2giorni.add( Calendar.DAY_OF_MONTH, 3);

Page 19: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

Differenza tra date

• Di solito si prendono le due date espresse in millisecondi, ad esempio con il metodo . getTimeInMillis( ) degli oggetti di classe GregorianCalendar

• Quindi si ha come differenza un valore d in millisecondi…secondi = d/1_000; minuti = d/60_000; ore = d / 3_600_000; giorni = d / 86_400_000;

Page 20: Le date in java Date, Calendar, GregorianCalendar, SimpleDateFormat

.getTime(..) e .getTime(..)

Una precisazione:

• il metodo .getTime di un oggetto GregorianCalendar restituisce un oggetto di classe Date

• il metodo .getTime di un oggetto Date restituisce il numero di millisecondi dal 1/1/1970

• La classe Date è deprecata!!