1. Passaggio dalla Dateclasse alla Calendarclasse
I programmatori adoravano la Dateclasse per la sua semplicità e il supporto per gli standard Unix, ma come sai, ogni rosa ha le sue spine.
I programmatori volevano una Dateclasse "intelligente". E hanno ottenuto ciò che volevano sotto forma di Calendarclasse. È stato concepito come un modo non solo per memorizzare le date, ma anche per eseguire operazioni difficili con le date.
Il nome completo della Calendarclasse è java.util.Calendar. Non dimenticare di aggiungerlo a un'istruzione import se decidi di usarlo nel tuo codice.
Puoi creare un Calendaroggetto con questo comando:
Calendar date = Calendar.getInstance();
Il metodo statico getInstance()della Calendarclasse crea un Calendaroggetto 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 Calendarclasse 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 GregorianCalendarogni 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 SimpleDateFormatoggetto per visualizzare un calendario, ma finché non lo studiamo, puoi usare questo trucchetto.
Date date = calendar.getTime();
Un Calendaroggetto può essere facilmente convertito in un Dateoggetto e sai già come visualizzare un Dateoggetto. Puoi usare un codice come questo per convertire un Calendaroggetto 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 Calendarclasse ha il get()metodo. È un singolo metodo, ma ha parametri:
int month = calendar.get(Calendar.MONTH);
Dove calendarè una Calendarvariabile ed MONTHè un campo costante della Calendarclasse.
Si passa uno dei Calendarcampi costanti della classe come argomento al getmetodo 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 setmetodo:
calendar.set(Calendar.MONTH, value);
Dove calendarè una Calendarvariabile ed MONTHè un campo costante della Calendarclasse.
Quando si lavora con setmetodo, si passa uno dei Calendarcampi 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 Calendarclasse
I campi costanti della Calendarclasse 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 Calendaroggetto
La Calendarclasse 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 Calendarvariabile ed MONTHè un campo costante della Calendarclasse.
Quando si lavora con addmetodo, si passa uno dei Calendarcampi 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 Calendarclasse 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