1. Datetempo 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 Dateclasse 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 Dateclasse così buona? La sua semplicità.
La Dateclasse archivia le informazioni su data e ora come numero di millisecondi trascorsi dal 1° gennaio 1970. Sono molti millisecondi, quindi il longtipo 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 Dateclasse.
2. Ottenere la data corrente
Per ottenere l'ora e la data correnti, è sufficiente creare un Dateoggetto. Ogni nuovo oggetto memorizza l'ora in cui è stato creato. Sembra molto semplice:
Date current = new Date();
Dopo aver eseguito questo comando, la currentvariabile 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 Dateoggetto, 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 Dateoggetto 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 Dateoggetto 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 Dateoggetto 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' Dateoggetto 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 Dateproprio 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 Dateoggetto:
if (date1.before(date2))
Si legge così: se date1viene prima date2, allora...
Il terzo modo è usare il after()metodo di un Dateoggetto:
if (date2.after(date1))
Si legge così: se date2è dopo date1, allora...
7. DateFormatclasse
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' Dateoggetto stesso, ma una stringa speciale ottenuta chiamando il format()metodo su un SimpleDateFormatoggetto. Ma questo non è nemmeno il punto principale qui.
Quando l' SimpleDateFormatoggetto è 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.parsemetodo
La Dateclasse 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.
GO TO FULL VERSION