From d9608d20a22907ac4ccd49c7b9e6465ed7916709 Mon Sep 17 00:00:00 2001 From: Holger Steinhauer Date: Sun, 19 Nov 2017 18:02:25 +0000 Subject: [PATCH 1/4] 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); + } + +} From 232d2d8e81a8f08b1008de8c78cc1818d193a6cf Mon Sep 17 00:00:00 2001 From: Holger Steinhauer Date: Sun, 19 Nov 2017 18:08:35 +0000 Subject: [PATCH 2/4] BAEL-1317: Display All Time Zones With GMT and UTC --- .../timezonedisplay/TimezoneDisplay.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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 index 296f8b82f8..ff618c8eea 100644 --- a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java +++ b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplay.java @@ -1,13 +1,11 @@ package com.baeldung.timezonedisplay; -import sun.util.calendar.ZoneInfo; - import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.ZoneOffset; import java.util.Comparator; import java.util.List; import java.util.Set; -import java.util.TimeZone; import java.util.stream.Collectors; public class TimezoneDisplay { @@ -40,10 +38,17 @@ public class TimezoneDisplay { @Override public int compare(ZoneId zoneId1, ZoneId zoneId2) { - TimeZone tz1 = ZoneInfo.getTimeZone(zoneId1); - TimeZone tz2 = ZoneInfo.getTimeZone(zoneId2); + LocalDateTime now = LocalDateTime.now(); - return Integer.compare(tz1.getRawOffset(), tz2.getRawOffset()); + ZoneOffset offset1 = now + .atZone(zoneId1) + .getOffset(); + + ZoneOffset offset2 = now + .atZone(zoneId2) + .getOffset(); + + return offset1.compareTo(offset2); } } From dbee97c1c1072eee3dd051cdc90d169e8189fc36 Mon Sep 17 00:00:00 2001 From: Holger Steinhauer Date: Mon, 20 Nov 2017 21:47:48 +0000 Subject: [PATCH 3/4] BAEL-1317: Adding Java7 examples --- .../timezonedisplay/TimezoneDisplayJava7.java | 43 +++++++++++++++++++ .../TimezoneDisplayJava7App.java | 23 ++++++++++ 2 files changed, 66 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java create mode 100644 core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java diff --git a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java new file mode 100644 index 0000000000..5249d11b98 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java @@ -0,0 +1,43 @@ +package com.baeldung.timezonedisplay; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.TimeZone; +import java.util.concurrent.TimeUnit; + +public class TimezoneDisplayJava7 { + + public List compileListFor(TimezoneDisplayJava7.OffsetBase base) { + String[] availableZoneIds = TimeZone.getAvailableIDs(); + List result = new ArrayList<>(availableZoneIds.length); + + for (String zoneId : availableZoneIds) { + TimeZone curTimeZone = TimeZone.getTimeZone(zoneId); + + String offset = calculateOffset(curTimeZone.getRawOffset()); + + result.add(String.format("(%s%s) %s", base, offset, zoneId)); + } + + Collections.sort(result); + + return result; + } + + private String calculateOffset(int rawOffset) { + if (rawOffset == 0) { + return "+00:00"; + } + long hours = TimeUnit.MILLISECONDS.toHours(rawOffset); + long minutes = TimeUnit.MILLISECONDS.toMinutes(rawOffset); + minutes = Math.abs(minutes - TimeUnit.HOURS.toMinutes(hours)); + + return String.format("%+03d:%02d", hours, Math.abs(minutes)); + } + + public enum OffsetBase { + GMT, UTC + } + +} diff --git a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java new file mode 100644 index 0000000000..8f0acb38f3 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java @@ -0,0 +1,23 @@ +package com.baeldung.timezonedisplay; + +import java.util.List; + +public class TimezoneDisplayJava7App { + + public static void main(String... args) { + TimezoneDisplayJava7 display = new TimezoneDisplayJava7(); + + System.out.println("Time zones in UTC:"); + List utc = display.compileListFor(TimezoneDisplayJava7.OffsetBase.UTC); + for (String timeZone : utc) { + System.out.println(timeZone); + } + + System.out.println("Time zones in GMT:"); + List gmt = display.compileListFor(TimezoneDisplayJava7.OffsetBase.GMT); + for (String timeZone : gmt) { + System.out.println(timeZone); + } + } + +} From 12567132b1054c60e4129cb00cdaf5c6b3bdee79 Mon Sep 17 00:00:00 2001 From: Holger Steinhauer Date: Tue, 21 Nov 2017 07:31:09 +0000 Subject: [PATCH 4/4] BAEL-1317: Moving Java7 example to `core-java` module --- .../baeldung/timezonedisplay/TimezoneDisplayJava7.java | 8 ++++---- .../baeldung/timezonedisplay/TimezoneDisplayJava7App.java | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename {core-java-8 => core-java}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java (100%) diff --git a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java b/core-java/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java rename to core-java/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java index 5249d11b98..79f0729f32 100644 --- a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java +++ b/core-java/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7.java @@ -8,6 +8,10 @@ import java.util.concurrent.TimeUnit; public class TimezoneDisplayJava7 { + public enum OffsetBase { + GMT, UTC + } + public List compileListFor(TimezoneDisplayJava7.OffsetBase base) { String[] availableZoneIds = TimeZone.getAvailableIDs(); List result = new ArrayList<>(availableZoneIds.length); @@ -36,8 +40,4 @@ public class TimezoneDisplayJava7 { return String.format("%+03d:%02d", hours, Math.abs(minutes)); } - public enum OffsetBase { - GMT, UTC - } - } diff --git a/core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java b/core-java/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java rename to core-java/src/main/java/com/baeldung/timezonedisplay/TimezoneDisplayJava7App.java