From d9608d20a22907ac4ccd49c7b9e6465ed7916709 Mon Sep 17 00:00:00 2001 From: Holger Steinhauer Date: Sun, 19 Nov 2017 18:02:25 +0000 Subject: [PATCH] BAEL-1317: Display All Time Zones With GMT and UTC --- .../timezonedisplay/TimezoneDisplay.java | 50 +++++++++++++++++++ .../timezonedisplay/TimezoneDisplayApp.java | 19 +++++++ 2 files changed, 69 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java create mode 100644 core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java diff --git a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java new file mode 100644 index 0000000000..296f8b82f8 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java @@ -0,0 +1,50 @@ +package com.baeldung.timezonedisplay; + +import sun.util.calendar.ZoneInfo; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Comparator; +import java.util.List; +import java.util.Set; +import java.util.TimeZone; +import java.util.stream.Collectors; + +public class TimezoneDisplay { + + public enum OffsetBase { + GMT, UTC + } + + public List compileListFor(OffsetBase base) { + Set availableZoneIds = ZoneId.getAvailableZoneIds(); + + LocalDateTime now = LocalDateTime.now(); + return availableZoneIds + .stream() + .map(ZoneId::of) + .sorted(new ZoneComparator()) + .map(id -> String.format("(%s%s) %s", base, getOffset(now, id), id.getId())) + .collect(Collectors.toList()); + } + + private String getOffset(LocalDateTime dateTime, ZoneId id) { + return dateTime + .atZone(id) + .getOffset() + .getId() + .replace("Z", "+00:00"); + } + + private class ZoneComparator implements Comparator { + + @Override + public int compare(ZoneId zoneId1, ZoneId zoneId2) { + TimeZone tz1 = ZoneInfo.getTimeZone(zoneId1); + TimeZone tz2 = ZoneInfo.getTimeZone(zoneId2); + + return Integer.compare(tz1.getRawOffset(), tz2.getRawOffset()); + } + } + +} diff --git a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java new file mode 100644 index 0000000000..42a7a2ba85 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayApp.java @@ -0,0 +1,19 @@ +package com.baeldung.timezonedisplay; + +import java.util.List; + +public class TimezoneDisplayApp { + + public static void main(String... args) { + TimezoneDisplay display = new TimezoneDisplay(); + + System.out.println("Time zones in UTC:"); + List utc = display.compileListFor(TimezoneDisplay.OffsetBase.UTC); + utc.forEach(System.out::println); + + System.out.println("Time zones in GMT:"); + List gmt = display.compileListFor(TimezoneDisplay.OffsetBase.GMT); + gmt.forEach(System.out::println); + } + +}