1. Date
tempo di classe e Unix
Fin dall'inizio di Java, il linguaggio ha avuto una classe speciale per lavorare con orari e date: Date
. Nel corso del tempo sono apparse molte altre classi per lavorare con le date, ma i programmatori continuano a utilizzare la Date
classe anche oggi.
Questo perché è molto semplice e conveniente. E come programmatore, lo incontrerai sicuramente in qualsiasi progetto reale. Se usarlo o meno è una tua scelta, ma devi saperlo. Quindi dedicagli qualche minuto del tuo prezioso tempo.
Cosa rende la Date
classe così buona? La sua semplicità.
La Date
classe archivia le informazioni su data e ora come numero di millisecondi trascorsi dal 1° gennaio 1970. Sono molti millisecondi, quindi il long
tipo viene utilizzato per archiviarli.
Perché dal 1970 in particolare? Questo è il cosiddetto tempo Unix : è il modo in cui il sistema operativo Unix, che è il nonno di tutti i moderni sistemi operativi, tiene il tempo.
Ma puoi facilmente scoprire quanto tempo è passato tra due date: basta sottrarre una data dall'altra e ottieni la differenza di tempo tra le date al millisecondo più vicino.
Ecco alcuni esempi utili di lavoro con la Date
classe.
2. Ottenere la data corrente
Per ottenere l'ora e la data correnti, è sufficiente creare un Date
oggetto. Ogni nuovo oggetto memorizza l'ora in cui è stato creato. Sembra molto semplice:
Date current = new Date();
Dopo aver eseguito questo comando, la current
variabile memorizzerà un riferimento all'oggetto creato Date
, che memorizzerà internamente l'ora della sua creazione, ovvero il numero di millisecondi trascorsi dal 1 gennaio 1970.
Visualizzazione della data corrente sullo schermo
Per visualizzare la data corrente è sufficiente: a) creare un nuovo Date
oggetto, b) stamparlo sullo schermo utilizzando il System.out.println()
metodo.
Esempio:
Codice | Uscita console |
---|---|
|
|
Ecco cosa significa l'output della console:
Testo | Interpretazione |
---|---|
giovedì _ | Giovedì |
21 febbraio | 21 febbraio |
14:01:34 | ore : minuti : secondi |
EET | Fuso orario: ora dell'Europa orientale |
2019 | Anno |
3. Fissare una data specifica
Abbiamo capito come ottenere l'ora corrente, ma come creiamo un Date
oggetto che memorizza una data o un'ora diversa?
Ancora una volta, tutto è semplice qui. Per impostare una data specifica, devi scrivere un codice come questo:
Date birthday = new Date(year, month, day);
Tutto è semplice e ovvio, ma ci sono due sfumature da tenere presente:
- L'anno deve essere contato dal 1900.
- I mesi sono numerati da zero.
Questa è un'altra eredità del sistema operativo Unix: su Unix, i programmatori indicavano l'anno usando due cifre. Invece di 1977, hanno semplicemente scritto 77. Quindi 77 è l'anno corretto se contiamo dal 1900.
Ad esempio, sono nato il 21 marzo 1989. Marzo è il terzo mese, quindi devo scrivere:
Codice | Uscita console |
---|---|
|
|
I mesi sono numerati da zero, ma i giorni no. È un po' strano, vero?
Pensiamo che i veri programmatori avrebbero dovuto prevalere e numerare anche i giorni del mese da zero. Oh, questi conformisti 🙂
Impostazione di un orario specifico
Anche l'impostazione di un orario specifico è abbastanza semplice: per questo, è necessario scrivere una dichiarazione come questa:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
Ore, minuti e secondi sono numerati da zero: lascia che il programmatore che è in te tiri un sospiro di sollievo.
Esempio:
Codice | Uscita console |
---|---|
|
|
Impostiamo l'ora 12:15 e la data 4 giugno 2005 . Questo è un po' difficile da leggere per un non programmatore, ma funziona come dovrebbe.
4. Lavorare con elementi di una data
Puoi fare di più con un Date
oggetto oltre a visualizzarlo. Ha metodi che ti consentono di ottenere singoli elementi della data memorizzata internamente:
Metodo | Descrizione |
---|---|
|
Restituisce l'anno della data relativa al 1900. |
|
Restituisce il mese della data (i mesi sono numerati da zero) |
|
Restituisce il giorno del mese |
|
Restituisce il giorno della settimana |
|
Restituisce le ore |
|
Restituisce i minuti |
|
Restituisce i secondi |
Esempio:
Codice | Uscita console | Nota |
---|---|---|
|
|
2005 giugno giorno del mese sabato |
A proposito, un Date
oggetto non solo ti consente di ottenere singoli elementi di una data, ma anche di modificarli:
Metodo | Descrizione |
---|---|
void setYear(int year) |
Cambia l'anno della data. L'anno è indicato rispetto al 1900. |
void setMonth(int month) |
Cambia il mese della data (i mesi sono numerati da zero) |
void setDate(int date) |
Cambia il giorno del mese |
void setHours(int hours) |
Cambia orario |
void setMinutes(int minutes) |
Cambia minuti |
void setSeconds(int seconds) |
Cambia secondi |
5. Millisecondi
Come abbiamo detto in precedenza, l' Date
oggetto memorizza il numero di millisecondi trascorsi dal 1 gennaio 1970.
Se abbiamo bisogno di quel numero, possiamo ottenerlo dall'oggetto Date
:
long time = date.getTime();
Il getTime()
metodo restituisce il numero di millisecondi memorizzati all'interno dell'oggetto Date
.
Non solo puoi ottenere il numero di millisecondi, ma puoi anche modificare quel numero in un oggetto esistente:
Date date = new Date();
date.setTime(1117876500000L);
A proposito, puoi scriverlo in modo ancora più conciso passando il tempo all'oggetto Date
proprio quando viene creato:
Date date = new Date(1117876500000L);
6. Confrontare le date
Se vuoi confrontare due date e scoprire quale è arrivata per prima, hai tre opzioni
Il primo modo è confrontare semplicemente il numero di millisecondi che ciascuno memorizza:
if (date1.getTime() < date2.getTime())
Il secondo modo è usare il before()
metodo di un Date
oggetto:
if (date1.before(date2))
Si legge così: se date1
viene prima date2
, allora...
Il terzo modo è usare il after()
metodo di un Date
oggetto:
if (date2.after(date1))
Si legge così: se date2
è dopo date1
, allora...
7. DateFormat
classe
Ricorda, quando abbiamo visualizzato la data sullo schermo, abbiamo visto qualcosa del genere: Thu Feb 21 14:01:34 EET 2019
. Tutto sembra corretto, ma il formato è più come una data verrebbe visualizzata per i programmatori piuttosto che per i normali umani. Vogliamo visualizzare la data in modo più chiaro per gli utenti. Qualcosa come Tuesday, February 21
.
E senza l'anno. O con un anno, se necessario. In generale, vogliamo poter visualizzare la data in modi diversi.
C'è una classe speciale per questo: SimpleDateFormat
.
Esempio:
Codice |
---|
|
Uscita console |
|
Guarda cosa mostrava il programma: Jun-04-2005
. Non è affatto quello che era.
La differenza è che non abbiamo visualizzato l' Date
oggetto stesso, ma una stringa speciale ottenuta chiamando il format()
metodo su un SimpleDateFormat
oggetto. Ma questo non è nemmeno il punto principale qui.
Quando l' SimpleDateFormat
oggetto è stato creato, abbiamo passato la stringa "MMM-dd-YYYY"
come parametro. È questa stringa che trasmette il formato della data che alla fine abbiamo visto nell'output della console.
- MMM indica di visualizzare il nome del mese, abbreviato con tre lettere
- dd indica di visualizzare il giorno del mese
- YYYY indica di visualizzare l'anno utilizzando quattro cifre
Se vogliamo emettere il mese come numeri, allora invece di MMM
, dobbiamo scrivere MM
, che produce lo schema "MM-dd-YYYY"
. L'output dello schermo sarà06-04-2005
Discuteremo questa classe in modo più dettagliato in seguito.
8. Date.parse
metodo
La Date
classe può fare qualcos'altro di interessante e utile: può ottenere una data da una stringa. Oppure, come dicono i programmatori, può analizzare una stringa.
Ha il parse()
metodo speciale per questo. L'analisi è simile a questa:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
A proposito, questo codice può essere scritto in modo più compatto:
Date date = new Date("Jul 06 12:15:00 2019");
Considereremo l' analisi delle stringhe in modo più dettagliato in altre lezioni.