...

Le date in java

by user

on
Category: Documents
26

views

Report

Comments

Transcript

Le date in java
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
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.
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)
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)
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 )
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)
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.
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
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
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")
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-12
MMM: gen-dic MMMM: gennaio-dicembre
• y esprime l’anno con due cifre
• yyyy esprime l’anno con quattro cifre
Classe SimpleDateFormat
•E
esprime il giorno della settimana
con 3 lettere (dom, lun, …)
• EEEE esprime il giorno della settimana
domenica, lunedì, …
• w
settimana nell’anno 1-52, ww:01-52
•W
settimana nel mese 1-6
Classe SimpleDateFormat
•
•
•
•
•
•
•
•
h
H
k
K
m
s
S
a
esprime l’ora 1-12 hh: 01-12
esprime l’ora 0-23 hh: 00-23
esprime l’ora 1-24 kk: 01-24
esprime l’ora 0-11 KK: 00-11
esprime i minuti 0-59, mm:00-59
esprime i secondi 0-59, ss:00-59
esprime i millisecondi SSS
esprime AM o PM
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
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
Esempio
String sFormato = "EEEE d MMMM yyyy HH:mm.ss";
String sDataScritta = "mercoledì 30 marzo 2013 13:
32.00";
SimpleDateFormat objFormato = new
(sFormato);
Date dataClasseDate =
(sDataScritta);
SimpleDateFormat
objFormato.parse
GregorianCalendar dataClasseGC = new
GregorianCalendar();
dataClasseGC.setTime(dataClasseDate);
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 negativa
GregorianCalendar oggi = new GregorianCalendar();
GregorianCalendar tra2giorni = new
GregorianCalendar();
tra2giorni.add( Calendar.DAY_OF_MONTH, 2);
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;
.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!!
Fly UP