1. Presentazione dell'API Date Time
Ai creatori di Java non piaceva la situazione con le classi Date e Calendar. Erano bravi ai loro tempi, ma i tempi cambiano. E si è reso necessario qualcosa di semplice, potente e affidabile. E con il rilascio di Java 8 (15 anni dopo Calendar
la sua comparsa), è stata introdotta l' API Java Date Time . È un insieme di classi che dovrebbero essere in grado di risolvere ogni possibile compito relativo al tempo.
C'erano così tante classi che sono state suddivise in diversi pacchetti:
Il java.time
pacchetto è il pacchetto base per l'API Java Date Time: contiene classi come LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
e Duration
. Tutti gli oggetti di queste classi sono immutable
, il che significa che non possono essere modificati dopo la creazione.
Il java.time.format
pacchetto contiene classi per la formattazione dell'ora, cioè la conversione di ore (e date) in stringhe e viceversa. Ad esempio, contiene la DateTimeFormatter
classe versatile, che sostituisce la SimpleDateFormat
classe.
Il java.time.zone
pacchetto contiene classi per lavorare con i fusi orari. Contiene classi come TimeZone
e ZonedDateTime
. Se stai scrivendo codice server per client situati in diverse parti del mondo, avrai davvero bisogno di queste classi.
2. LocalDate
classe
La prima e più utile classe dell'API Date Time che esamineremo è la LocalDate
classe. Come probabilmente puoi intuire dal nome, questa classe è progettata per funzionare con le date.
Gli oggetti di questa classe non cambiano dopo essere stati creati, cioè la LocalDate
classe è immutabile. Ma questa proprietà aggiunge semplicità e affidabilità alla classe. Soprattutto se più thread (thread di esecuzione) interagiscono contemporaneamente con un tale oggetto.
Per creare un nuovo LocalDate
oggetto, è necessario utilizzare uno dei metodi statici. Ecco un elenco dei principali.
Ottenere la data corrente
Per ottenere la data corrente, è necessario utilizzare il now()
metodo statico. Questo è molto più facile di quanto sembri:
LocalDate today = LocalDate.now();
Dove today
è una LocalDate
variabile ed LocalDate.now()
è una chiamata al now()
metodo statico della LocalDate
classe.
Esempio:
Codice | Uscita console |
---|---|
|
|
Ottenere una data in un fuso orario specifico
La LocalDate
classe ha anche una variazione del now(ZoneId)
metodo che ti consente di ottenere la data corrente in un fuso orario specifico.
Per fare ciò, abbiamo bisogno di un'altra classe: la ZoneId
classe (java.time.ZoneId). Ha un of()
metodo che restituisce un ZoneId
oggetto dato il nome del fuso orario.
Per determinare la data corrente a Shanghai, devi scrivere il seguente codice:
Codice | Uscita console |
---|---|
|
|
Puoi trovare un elenco dei nomi di tutti i fusi orari su Internet.
3. Ottenere una data specifica
Per ottenere un LocalDate
oggetto che rappresenta una data specifica, è necessario utilizzare il of()
metodo statico. Tutto qui è anche molto semplice e chiaro:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Dove date
è una LocalDate
variabile ed è una chiamata al metodo statico della classe.LocalDate.of()
of()
LocalDate
Qui vediamo la FEBRUARY
costante della Month
classe (java.time.Month) utilizzata per specificare febbraio come mese.
Puoi anche specificare il mese alla vecchia maniera, usando un numero:
LocalDate date = LocalDate.of(2019, 2, 22);
Due? Invece di febbraio? Ciò significa che i mesi sono ancora una volta numerati da uno?
Sì, quasi 20 anni dopo la creazione di Java, i mesi hanno finalmente smesso di essere numerati da zero.
Esempio:
Codice | Uscita console |
---|---|
|
|
Ottenere una data dall'indice del giorno
C'è un altro modo interessante per creare una data: utilizzando il ofYearDay
metodo, puoi ottenere una data basata solo sul numero dell'anno e sull'indice del giorno nell'anno. Ecco l'aspetto generale:
LocalDate date = LocalDate.ofYearDay(year, day);
Dove year
è il numero dell'anno ed day
è l'indice del giorno dell'anno.
Esempio:
Codice | Uscita console |
---|---|
|
|
Il centesimo giorno del 2019 è il 10 aprile.
Ottenere una data Unix
Ricordi che Date
gli oggetti hanno sempre memorizzato il tempo come numero di millisecondi dal 1 gennaio 1970? Per assicurarsi che i programmatori non si perdessero i bei vecchi tempi, la LocalDate
classe ha ottenuto un ofEpochDay()
metodo che restituisce la data calcolata dal 1° gennaio 1970. Ecco l'aspetto generale:
LocalDate date = LocalDate.ofEpochDay(day);
Dove day
è il numero di giorni trascorsi dal 1 gennaio 1970.
Esempio:
Codice | Uscita console |
---|---|
|
|
4. Ottenere elementi di una data
È impossibile modificare LocalDate
gli oggetti, ma è possibile ottenere singoli elementi della data memorizzata. LocalDate
gli oggetti hanno diversi metodi per questo:
Metodo | Descrizione |
---|---|
|
Restituisce l'anno di una data specifica |
|
Restituisce il mese della data: una delle diverse costantiJANUARY, FEBRUARY, ...; |
|
Restituisce l'indice del mese della data. Gennaio == 1. |
|
Restituisce l'indice del giorno del mese |
|
Restituisce l'indice del giorno dall'inizio dell'anno |
|
Restituisce il giorno della settimana: una delle diverse costantiMONDAY, TUESDAY, ...; |
|
Restituisce l'era: o BCE (Before Current Era) e CE (Current Era) |
Esempio:
Codice | Uscita console |
---|---|
|
|
5. Modifica della data in un LocalDate
oggetto
La LocalDate
classe contiene diversi metodi che consentono di lavorare con le date. L'implementazione di questi metodi è analoga ai metodi della String
classe: non modificano l' LocalDate
oggetto esistente, ma ne restituiscono uno nuovo con i dati desiderati.
Ecco i metodi della LocalDate
classe:
Metodo | Descrizione |
---|---|
|
Aggiunge un numero specificato di giorni alla data |
|
Aggiunge settimane alla data |
|
Aggiunge mesi alla data |
|
Aggiunge anni alla data |
|
Sottrae i giorni dalla data |
|
Sottrae settimane dalla data |
|
Sottrae i mesi dalla data |
|
Sottrae anni dalla data |
Esempio:
Codice | Uscita console |
---|---|
|
|
I birthday object
cui metodi chiamiamo non cambiano. Invece, i suoi metodi restituiscono nuovi oggetti che contengono i dati desiderati.
GO TO FULL VERSION