Comments
Description
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!!