Définir le fuseau horaire d'une date en Java
1. Vue d'ensemble
Dans ce rapide didacticiel, nous allons voir comment définir le fuseau horaire d'une date à l'aide de Java 7, Java 8 et de la bibliothèque Joda-Time.
2. Utiliser Java 8
Java 8 a introduita new Date-Time API pour travailler avec des dates et des heures qui était largement basé sur la bibliothèque Joda-Time.
La classeInstant de l'API Java Date Time modélise un point instantané unique sur la chronologie en UTC. Cela représente le nombre de nanosecondes depuis l'époque du premier instant de 1970 UTC.
Tout d'abord, nous allons obtenir lesInstant actuels à partir de l'horloge système et lesZoneId pour un nom de fuseau horaire:
Instant nowUtc = Instant.now();
ZoneId asiaSingapore = ZoneId.of("Asia/Singapore");
Enfin, lesZoneId etInstant peuvent être utilisés pour créer un objet date-heure avec des détails de fuseau horaire. La classeZonedDateTime 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é lesZonedDateTime de Java 8 pour représenter une date-heure avec un fuseau horaire.
3. Utiliser Java 7
En Java 7, la définition du fuseau horaire est un peu délicate. La classeDate (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 objetTimeZone:
Date nowUtc = new Date();
TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);
Dans Java 7, nous devons utiliser la classeCalendar pour représenter une date avec un fuseau horaire.
Enfin, nous pouvons créer unnowUtc Calendar avec lesasiaSingapore 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. Utiliser Joda-Time
Si Java 8 n’est pas une option,we can still get the same kind of result from Joda-Time, une norme de facto pour les opérations date-heure dans le monde pré-Java 8.
Tout d'abord, nous devons ajouter lesJoda-Time dependency àpom.xml:
joda-time
joda-time
2.10
Pour représenter un point exact sur la chronologie, nous pouvons utiliserInstant du packageorg.joda.time. En interne, la classe contient une donnée, l’instant en millisecondes de l’époque Java de 1970-01-01T00: 00: 00Z:
Instant nowUtc = Instant.now();
Nous utiliseronsDateTimeZone pour représenter un fuseau horaire (pour l'ID de fuseau horaire spécifié):
DateTimeZone asiaSingapore = DateTimeZone.forID("Asia/Singapore");
Maintenant, l'heure denowUtc sera convertie en objetDateTime en utilisant les informations de fuseau horaire:
DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);
C’est ainsi que l’API Joda-time peut être utilisée pour combiner des informations de date et de fuseau horaire.
5. Conclusion
Dans cet article, nous avons découvert comment définir le fuseau horaire dans 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, consultezour Java 8 date-time intro.
Comme toujours, l'extrait de code est disponible dans lesGitHub repository.