Java 8 - Exemples ZonedDateTime

Quelques exemplesjava.time.ZonedDateTime pour vous montrer comment convertir un fuseau horaire entre différents pays.
1. Malaisie (KUL) → Japon (HND)
Avis sur un vol Malaisie Kuala Lumpur (UTC + 08: 00) - Japon Tokyo Haneda (UTC + 09: 00)
---Flight Detail--- Kuala Lumpur (KUL) -> Tokyo Haneda (HND) Flight Duration : 7 hours (KUL-Depart) 1430, 22 Aug 2016 -> 2230, 22 Aug 2016 (HND-Arrive)
P.S Japan Tokyo is one hour faster than Malaysia Kuala lumpur
DifferentTimeZoneExample1.java
package com.example.timezone;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class DifferentTimeZoneExample1 {
public static void main(String[] args) {
DateTimeFormatter format = DateTimeFormatter.ofPattern("HHmm, dd MMM yyyy");
LocalDateTime ldt = LocalDateTime.of(2016, Month.AUGUST, 22, 14, 30);
System.out.println("LocalDateTime : " + format.format(ldt));
//UTC+8
ZonedDateTime klDateTime = ldt.atZone(ZoneId.of("Asia/Kuala_Lumpur"));
System.out.println("Depart : " + format.format(klDateTime));
//UTC+9 and flight duration = 7 hours
ZonedDateTime japanDateTime = klDateTime.withZoneSameInstant(ZoneId.of("Asia/Tokyo")).plusHours(7);
System.out.println("Arrive : " + format.format(japanDateTime));
System.out.println("\n---Detail---");
System.out.println("Depart : " + klDateTime);
System.out.println("Arrive : " + japanDateTime);
}
}
Sortie
LocalDateTime : 1430, 22 Aug 2016 Depart : 1430, 22 Aug 2016 Arrive : 2230, 22 Aug 2016 ---Detail--- Depart : 2016-08-22T14:30+08:00[Asia/Kuala_Lumpur] Arrive : 2016-08-22T22:30+09:00[Asia/Tokyo]
2. France, Paris → -05: 00
Un autre exemple de fuseau horaire de la France, Paris (UTC + 02: 00, DST) vers un fuseau horaire codé en dur (UTC-05: 00) (par exemple New York)
---Flight Detail--- France, Paris -> UTC-05:00 Flight Duration : 8 hours 10 minutes (Depart) 1430, 22 Aug 2016 -> 1540, 22 Aug 2016 (Arrive)
DifferentTimeZoneExample2.java
package com.example.timezone;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class DifferentTimeZoneExample2 {
public static void main(String[] args) {
DateTimeFormatter format = DateTimeFormatter.ofPattern("HHmm, dd MMM yyyy");
//Convert String to LocalDateTime
String date = "2016-08-22 14:30";
LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
System.out.println("LocalDateTime : " + format.format(ldt));
//Paris, 2016 Apr-Oct = DST, UTC+2, other months UTC+1
//UTC+2
ZonedDateTime parisDateTime = ldt.atZone(ZoneId.of("Europe/Paris"));
System.out.println("Depart : " + format.format(parisDateTime));
//hard code a zoneoffset like this, UTC-5
ZoneOffset nyOffSet = ZoneOffset.of("-05:00");
ZonedDateTime nyDateTime = parisDateTime.withZoneSameInstant(nyOffSet).plusHours(8).plusMinutes(10);
System.out.println("Arrive : " + format.format(nyDateTime));
System.out.println("\n---Detail---");
System.out.println("Depart : " + parisDateTime);
System.out.println("Arrive : " + nyDateTime);
}
}
Sortie
LocalDateTime : 1430, 22 Aug 2016 Depart : 1430, 22 Aug 2016 Arrive : 1540, 22 Aug 2016 ---Detail--- Depart : 2016-08-22T14:30+02:00[Europe/Paris] Arrive : 2016-08-22T15:40-05:00
Daylight Saving Time (DST)
Paris, normalement UTC + 1 a DST (ajouter une heure = UTC + 2) du 27 / mars au 30 / octobre 2016. Examinez la sortie ci-dessus, lejava.time est capable de calculer et de gérer correctement l'heure d'été.