Implemented a mechanism to set the offset/time-zone to use for conversions
[jpa-converters] / src / main / java / de / juplo / jpa / converters / TimeConversions.java
diff --git a/src/main/java/de/juplo/jpa/converters/TimeConversions.java b/src/main/java/de/juplo/jpa/converters/TimeConversions.java
new file mode 100644 (file)
index 0000000..03dfd88
--- /dev/null
@@ -0,0 +1,114 @@
+package de.juplo.jpa.converters;
+
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+
+
+/**
+ *
+ * @author Kai Moritz
+ */
+public class TimeConversions
+{
+  private static ZoneIdStrategy zoneStrategy =
+      new SystemDefaultZoneIdStrategy();
+  private static ZoneOffsetStrategy offsetStrategy =
+      new SystemDefaultZoneOffsetStrategy();
+
+
+  public static ZoneId getZoneId()
+  {
+    return zoneStrategy.getZoneId();
+  }
+
+  public static ZoneOffset getZoneOffset()
+  {
+    return offsetStrategy.getZoneOffset();
+  }
+
+
+  public static void setZoneIdStrategy(ZoneIdStrategy strategy)
+  {
+    if (strategy == null)
+      throw new IllegalArgumentException("Strategy must not be null!");
+    zoneStrategy = strategy;
+  }
+
+  public static void setZoneOffsetStrategy(ZoneOffsetStrategy strategy)
+  {
+    if (strategy == null)
+      throw new IllegalArgumentException("Strategy must not be null!");
+    offsetStrategy = strategy;
+  }
+
+
+  public interface ZoneIdStrategy
+  {
+    public ZoneId getZoneId();
+  }
+
+  public interface ZoneOffsetStrategy
+  {
+    public ZoneOffset getZoneOffset();
+  }
+
+
+  public static class SystemDefaultZoneIdStrategy
+      implements
+        ZoneIdStrategy
+  {
+    @Override
+    public ZoneId getZoneId()
+    {
+      return ZoneId.systemDefault();
+    }
+  }
+
+  public static class SystemDefaultZoneOffsetStrategy
+      implements
+        ZoneOffsetStrategy
+  {
+    @Override
+    public ZoneOffset getZoneOffset()
+    {
+      return ZoneOffset.systemDefault().getRules().getOffset(Instant.now());
+    }
+  }
+
+  public static class FixedZoneIdStrategy
+      implements
+        ZoneIdStrategy
+  {
+    private final ZoneId zone;
+
+    public FixedZoneIdStrategy(ZoneId zone)
+    {
+      this.zone = zone;
+    }
+
+    @Override
+    public ZoneId getZoneId()
+    {
+      return zone;
+    }
+  }
+
+  public static class FixedZoneOffsetStrategy
+      implements
+        ZoneOffsetStrategy
+  {
+    private final ZoneOffset offset;
+
+    public FixedZoneOffsetStrategy(ZoneOffset offset)
+    {
+      this.offset = offset;
+    }
+
+    @Override
+    public ZoneOffset getZoneOffset()
+    {
+      return offset;
+    }
+  }
+}