1. Passaggio dalla Date
classe alla Calendar
classe
I programmatori adoravano la Date
classe per la sua semplicità e il supporto per gli standard Unix, ma come sai, ogni rosa ha le sue spine.
I programmatori volevano una Date
classe "intelligente". E hanno ottenuto ciò che volevano sotto forma di Calendar
classe. È stato concepito come un modo non solo per memorizzare le date, ma anche per eseguire operazioni difficili con le date.
Il nome completo della Calendar
classe è java.util.Calendar. Non dimenticare di aggiungerlo a un'istruzione import se decidi di usarlo nel tuo codice.
Puoi creare un Calendar
oggetto con questo comando:
Calendar date = Calendar.getInstance();
Il metodo statico getInstance()
della Calendar
classe crea un Calendar
oggetto inizializzato con la data corrente. Il calendario desiderato verrà creato in base alle impostazioni del computer che esegue il programma.
O più precisamente, il calendario che ottieni... Questo perché gli esseri umani sulla Terra non sono limitati a un singolo calendario. Invece ne usano molti. E quasi ognuno di loro è associato a qualche religione o paese. La Calendar
classe ne supporta 3:
Calendario | Descrizione |
---|---|
Calendario gregoriano | Calendario gregoriano cristiano |
Calendario buddista | Calendario buddista |
Calendario imperiale giapponese | Calendario imperiale giapponese |
Ma ci sono anche calendari cinesi e arabi. Fondamentalmente, lavorare con il tempo non è così facile come sembra.
Nel calendario cinese, l'anno è ufficialmente 4716 al momento della stesura di questa lezione. E secondo il calendario musulmano, l'anno è il 1398. Benvenuto nel grande mondo, mio amico programmatore.
2. Creazione di un oggetto calendario
Useremo il calendario gregoriano, poiché è il più comune al mondo. Almeno fino a quando la Cina non acquisterà Oracle e renderà il calendario cinese quello principale.
Puoi creare un oggetto calendario con qualsiasi data utilizzando un'istruzione come questa:
Calendar date = new GregorianCalendar(year, month, day);
Sì, devi scrivere GregorianCalendar
ogni volta. Invece di Calendar
, puoi anche scrivere GregorianCalendar
— anche questo funzionerà. Ma scrivere Calendar
è solo più breve.
L'anno deve essere scritto per intero, ad esempio non si può scrivere 19 invece di 2019. I mesi sono comunque numerati a partire da zero. Ma come prima, i giorni del mese non si contano da zero. Secchioni!
Per impostare l'ora e la data, è necessario passare l'ora come argomenti aggiuntivi:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Puoi anche passare in millisecondi se necessario. Sono il parametro dopo il numero di secondi.
3. Visualizzazione di un oggetto calendario sullo schermo
Se stampi semplicemente un oggetto calendario sullo schermo, non sarai molto soddisfatto del risultato.
Codice |
---|
|
Uscita console |
|
La cosa da tenere a mente qui è che un calendario è un calendario, non una data : ha tutti i tipi di impostazioni che verranno tutte visualizzate sullo schermo.
Sarebbe appropriato usare un SimpleDateFormat
oggetto per visualizzare un calendario, ma finché non lo studiamo, puoi usare questo trucchetto.
Date date = calendar.getTime();
Un Calendar
oggetto può essere facilmente convertito in un Date
oggetto e sai già come visualizzare un Date
oggetto. Puoi usare un codice come questo per convertire un Calendar
oggetto in un Date
:
Utilizzando il getTime()
metodo:
Codice | Uscita console |
---|---|
|
|
Questa è una questione completamente diversa, non è vero?
4. Lavorare con elementi di una data
Per ottenere un elemento specifico di una data (ad esempio l'anno, il mese, ...), la Calendar
classe ha il get()
metodo. È un singolo metodo, ma ha parametri:
int month = calendar.get(Calendar.MONTH);
Dove calendar
è una Calendar
variabile ed MONTH
è un campo costante della Calendar
classe.
Si passa uno dei Calendar
campi costanti della classe come argomento al get
metodo e si ottiene il valore desiderato come risultato.
Esempi
Codice | Descrizione |
---|---|
|
era (prima o dopo l'era volgare) anno mese giorno del mese giorno della settimana ore minuti secondi |
Per modificare un elemento di una data, utilizzare il set
metodo:
calendar.set(Calendar.MONTH, value);
Dove calendar
è una Calendar
variabile ed MONTH
è un campo costante della Calendar
classe.
Quando si lavora con set
metodo, si passa uno dei Calendar
campi costanti della classe come primo argomento e il nuovo valore come secondo argomento.
Esempi
Codice | Descrizione |
---|---|
|
anno = 2019 mese = luglio (numerato da 0) 4° giorno ore minuti secondi |
5. Costanti della Calendar
classe
I campi costanti della Calendar
classe non si limitano a quelli per denominare gli elementi di una data. Sembra che ci siano campi per ogni occasione.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Ad esempio, ci sono campi costanti per fare riferimento ai mesi:
E anche i giorni della settimana:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Non elencheremo tutto. Semplicemente non vogliamo che tu sia sorpreso se vedi costanti come questa nel codice.
L'uso delle costanti rende il codice più leggibile, motivo per cui i programmatori le usano. E i mesi sono numerati da zero anche per migliorare la leggibilità. O no.
6. Modifica della data in un Calendar
oggetto
La Calendar
classe ha un metodo che ti consente di operare su una data in modi più intelligenti. Ad esempio, puoi aggiungere un anno, un mese o diversi giorni a una data. Oppure portali via. Questo metodo si chiama add()
. Lavorare con esso assomiglia a questo:
calendar.add(Calendar.MONTH, value);
Dove calendar
è una Calendar
variabile ed MONTH
è un campo costante della Calendar
classe.
Quando si lavora con add
metodo, si passa uno dei Calendar
campi costanti della classe come primo argomento e come secondo argomento — il nuovo valore da aggiungere.
Questo è un altro metodo intelligente. Vediamo quanto è intelligente:
Codice |
---|
|
Uscita console |
|
Questo metodo comprende che ci sono solo 28 giorni a febbraio 2019, quindi la data risultante è il 1 marzo.
Ora togliamoci 2 mesi! Cosa dovremmo ottenere? 27 dicembre 2018! Controlliamo ora.
Per eseguire un'operazione che risulta in una data precedente, è necessario passare un valore negativo al add()
metodo:
Codice |
---|
|
Uscita console |
|
Funziona!
Questo metodo tiene conto delle diverse lunghezze dei mesi e degli anni bisestili. Insomma, un ottimo metodo. È esattamente ciò di cui ha bisogno la maggior parte dei programmatori che lavorano con le date.
7. Elementi scorrevoli di una data
Ma a volte ci sono situazioni in cui non vogliamo questo comportamento intelligente, ad esempio vuoi fare qualcosa per una parte della data senza cambiare tutto il resto.
La Calendar
classe ha il roll()
metodo speciale per questo. La sua firma è proprio come il add()
metodo, ma questo metodo cambia solo un elemento della data, lasciando il resto invariato.
Esempio:
Codice |
---|
|
Uscita console |
|
Abbiamo cambiato il mese, ma l'anno e la data sono rimasti invariati.
GO TO FULL VERSION