--- /dev/null
+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;
+ }
+ }
+}