Définir le fuseau horaire d'une date en Java

1. Vue d'ensemble

Dans ce rapide tutoriel, nous verrons comment définir le fuseau horaire d'une date à l'aide de Java 7, Java 8 et de la bibliothèque Joda-Time.

2. Utilisation de Java 8

Java 8 a introduit une nouvelle API Date-Heure pour travailler avec des dates et des heures qui était en grande partie basée sur la bibliothèque Joda-Time.

La classe Instant de l'API Java Date Time modélise un point instantané unique sur la chronologie en UTC. Cela représente le décompte des nanosecondes depuis l'époque du premier moment de 1970 UTC.

Tout d'abord, nous obtiendrons l' instant actuel à partir de l'horloge système et ZoneId pour un nom de fuseau horaire:

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

Enfin, ZoneId et Instant peuvent être utilisés pour créer un objet date-heure avec des détails de fuseau horaire. La classe ZonedDateTime représente une date-heure avec un fuseau horaire dans le système de calendrier ISO-8601:

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

Nous avons utilisé ZonedDateTime de Java 8 pour représenter une date-heure avec un fuseau horaire.

3. Utilisation de Java 7

Dans Java 7, définir le fuseau horaire est un peu délicat. La classe Date (qui représente un instant spécifique dans le temps) ne contient aucune information de fuseau horaire.

Tout d'abord, obtenons la date UTC actuelle et un objet TimeZone :

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

Dans Java 7, nous devons utiliser la classe Calendar pour représenter une date avec un fuseau horaire.

Enfin, nous pouvons créer un calendrier nowUtc avec asiaSingapore TimeZone et régler l'heure:

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

Il est recommandé d'éviter l'API de date et d'heure Java 7 au profit de l'API de date et d'heure Java 8 ou de la bibliothèque Joda-Time.

4. Utilisation de Joda-Time

Si Java 8 n'est pas une option, nous pouvons toujours obtenir le même type de résultat de Joda-Time , un standard de facto pour les opérations date-heure dans le monde pré-Java 8.

Tout d'abord, nous devons ajouter la dépendance Joda-Time à pom.xml:

 joda-time joda-time 2.10 

Pour représenter un point exact sur la chronologie, nous pouvons utiliser Instant du package org.joda.time . En interne, la classe contient un élément de données, l'instant en millisecondes depuis l'époque Java de 1970-01-01T00: 00: 00Z:

Instant nowUtc = Instant.now();

Nous utiliserons DateTimeZone pour représenter un fuseau horaire (pour l'ID de fuseau horaire spécifié):

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

Maintenant, l' heure nowUtc sera convertie en objet DateTime à l'aide des informations de fuseau horaire:

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

C'est ainsi que l'API Joda-time peut être utilisée pour combiner les informations de date et de fuseau horaire.

5. Conclusion

Dans cet article, nous avons découvert comment définir le fuseau horaire en Java à l'aide de Java 7, 8 et de l'API Joda-Time. Pour en savoir plus sur la prise en charge de la date et de l'heure de Java 8, consultez notre introduction à la date et à l'heure de Java 8.

Comme toujours, l'extrait de code est disponible dans le référentiel GitHub.