1. ZonedDateTime
classe
C'è un'altra classe molto interessante nell'API Date Time: la ZonedDateTime
classe. Il suo scopo principale è rendere conveniente lavorare con date in diversi fusi orari.
LocalDate
è ottimo per rappresentare le date. Ad esempio, i compleanni. Il mio compleanno è il 15 marzo, non importa dove mi trovo. Questo è un esempio di data.
LocalTime
è bello descrivere il tempo, come l'ora impostata su una sveglia: metto la sveglia alle 5:00 e non importa dove mi trovo. Le 5:00 sono le 5:00. Questo è un esempio di come lavorare con il tempo.
Ora diciamo che stiamo scrivendo un'applicazione che prenota i voli. Gli aerei decollano e arrivano in base all'ora locale. L'aereo è in volo per un tempo fisso, ma i fusi orari possono cambiare.
Fusi orari
A proposito, i fusi orari sono un vero casino. E se pensi che ci siano 24 fusi orari, ti sbagli di grosso.
Ad esempio, l'ora in India differisce da Greenwich Mean Time di cinque ore e mezza: GMT+5:30
. Alcuni paesi passano all'ora legale e altri no. Inoltre, diversi paesi passano all'ora legale in diversi periodi dell'anno.
E alcuni paesi approvano leggi che annullano l'ora legale, o la reintroducono o la annullano di nuovo.
In ogni caso, il mondo ha fusi orari, e all'interno di ogni fuso orario c'è un tempo. Il tempo in diverse zone può coincidere durante determinati periodi dell'anno e quindi differire durante altri periodi. I fusi orari prendono solitamente il nome dalle principali città che si trovano in essi: Europe/Monaco
, Asia/Singapore
, ma ci sono anche eccezioni - US/Pacific
.
Ufficialmente, al momento ci sono 599 fusi orari. Pensaci: 599. È tutt'altro che 24. Benvenuto nel mondo globale.
La ZoneId
classe del java.time
pacchetto viene utilizzata per memorizzare un fuso orario in Java.
A proposito, ha un getAvailableZoneIds()
metodo statico, che restituisce l'insieme di tutti i fusi orari attualmente conosciuti. Per ottenere un elenco di tutte le zone, è necessario scrivere il seguente codice:
Codice | Uscita console (parziale) |
---|---|
|
|
Per ottenere un ZoneId
oggetto con il suo nome, devi usare il of()
metodo statico;
Codice | Nota |
---|---|
|
|
2. Creazione di un ZonedDateTime
oggetto
Quando crei un ZonedDateTime
oggetto, devi chiamare il now()
metodo statico della classe e passargli un ZoneId
oggetto.
Codice | Uscita console |
---|---|
|
|
Se non si passa un ZoneId
oggetto al now()
metodo (e ciò è consentito), il fuso orario viene determinato automaticamente in base alle impostazioni del computer che esegue il programma.
Esempio:
Codice | Uscita console |
---|---|
|
|
Conversione di una data globale in una locale
Una delle caratteristiche interessanti di ZonedDateTime
è la sua capacità di convertire in data e ora locali. Esempio:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Lavorare con il tempo
Come la LocalDateTime
classe, la ZonedDateTime
classe ha molti modi per ottenere singoli elementi di data e ora. Ecco un elenco di questi metodi:
|
Restituisce l'anno di una data specifica |
|
Restituisce il mese della data: una delle numerose costanti —JANUARY, FEBRUARY, ...; |
|
Restituisce l'indice del mese della data. Gennaio == 1 |
|
Restituisce l'indice del giorno del mese |
|
Restituisce il giorno della settimana: una delle numerose costanti —MONDAY, TUESDAY, ...; |
|
Restituisce l'indice del giorno dell'anno |
|
Restituisce le ore |
|
Restituisce i minuti |
|
Restituisce i secondi |
|
Restituisce i nanosecondi |
Tutti i metodi sono perfettamente analoghi ai metodi della LocalDateTime
classe. E, naturalmente, la ZonedDateTime
classe ha metodi che ti permettono di lavorare con date e orari. Detto questo, l'oggetto su cui vengono chiamati i metodi non cambia. Invece, restituiscono un nuovo ZonedDateTime
oggetto:
Metodi | Descrizione |
---|---|
|
Aggiunge anni alla data |
|
Aggiunge mesi alla data |
|
Aggiunge giorni alla data |
|
Aggiunge ore |
|
Aggiunge minuti |
|
Aggiunge secondi |
|
Aggiunge nanosecondi |
|
Sottrae anni dalla data |
|
Sottrae i mesi dalla data |
|
Sottrae i giorni dalla data |
|
Sottrae ore |
|
Sottrae minuti |
|
Sottrae i secondi |
|
Sottrae i nanosecondi |
Non forniremo alcun esempio, poiché riteniamo che qui sia tutto chiaro per analogia con le classi appena considerate.
GO TO FULL VERSION