Imposta il fuso orario di una data in Java

1. Panoramica

In questo rapido tutorial vedremo come impostare il fuso orario di una data utilizzando Java 7, Java 8 e la libreria Joda-Time.

2. Utilizzo di Java 8

Java 8 ha introdotto una nuova API Date-Time per lavorare con date e orari che era in gran parte basata sulla libreria Joda-Time.

La classe Instant dell'API Java Date Time modella un singolo punto istantaneo sulla sequenza temporale in UTC. Questo rappresenta il conteggio dei nanosecondi dall'epoca del primo momento del 1970 UTC.

Innanzitutto, otterremo l' istante corrente dall'orologio di sistema e ZoneId per un nome di fuso orario:

Instant nowUtc = Instant.now(); ZoneId asiaSingapore = ZoneId.of("Asia/Singapore");

Infine, ZoneId e Instant possono essere utilizzati per creare un oggetto data-ora con i dettagli del fuso orario. La classe ZonedDateTime rappresenta una data-ora con un fuso orario nel sistema di calendario ISO-8601:

ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore);

Abbiamo utilizzato ZonedDateTime di Java 8 per rappresentare una data-ora con un fuso orario.

3. Utilizzo di Java 7

In Java 7, impostare il fuso orario è un po 'complicato. La classe Date (che rappresenta un istante specifico nel tempo) non contiene alcuna informazione sul fuso orario.

Per prima cosa, otteniamo la data UTC corrente e un oggetto TimeZone :

Date nowUtc = new Date(); TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);

In Java 7, dobbiamo utilizzare la classe Calendar per rappresentare una data con un fuso orario.

Infine, possiamo creare un calendario nowUtc con asiaSingapore TimeZone e impostare l'ora:

Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore); nowAsiaSingapore.setTime(nowUtc);

Si consiglia di evitare l'API data e ora Java 7 a favore dell'API data ora Java 8 o la libreria Joda-Time.

4. Utilizzo di Joda-Time

Se Java 8 non è un'opzione, possiamo comunque ottenere lo stesso tipo di risultato da Joda-Time , uno standard de facto per le operazioni di data e ora nel mondo pre-Java 8.

Innanzitutto, dobbiamo aggiungere la dipendenza Joda-Time a pom.xml:

 joda-time joda-time 2.10 

Per rappresentare un punto esatto sulla sequenza temporale possiamo utilizzare Instant dal pacchetto org.joda.time . Internamente, la classe contiene un dato, l'istante in millisecondi dall'epoca di Java del 1970-01-01T00: 00: 00Z:

Instant nowUtc = Instant.now();

Useremo DateTimeZone per rappresentare un fuso orario (per l'id del fuso orario specificato):

DateTimeZone asiaSingapore = DateTimeZone.forID("Asia/Singapore");

Ora l'ora nowUtc verrà convertita in un oggetto DateTime utilizzando le informazioni sul fuso orario:

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

In questo modo è possibile utilizzare l'API Joda-time per combinare le informazioni sulla data e sul fuso orario.

5. conclusione

In questo articolo, abbiamo scoperto come impostare il fuso orario in Java utilizzando Java 7, 8 e l'API Joda-Time. Per ulteriori informazioni sul supporto data e ora di Java 8, dai un'occhiata alla nostra introduzione di data e ora di Java 8.

Come sempre lo snippet di codice è disponibile nel repository GitHub.