Implemented a mechanism to set the offset/time-zone to use for conversions
[jpa-converters] / src / main / java / de / juplo / jpa / converters / TimeConversions.java
1 package de.juplo.jpa.converters;
2
3 import java.time.Instant;
4 import java.time.ZoneId;
5 import java.time.ZoneOffset;
6
7
8 /**
9  *
10  * @author Kai Moritz
11  */
12 public class TimeConversions
13 {
14   private static ZoneIdStrategy zoneStrategy =
15       new SystemDefaultZoneIdStrategy();
16   private static ZoneOffsetStrategy offsetStrategy =
17       new SystemDefaultZoneOffsetStrategy();
18
19
20   public static ZoneId getZoneId()
21   {
22     return zoneStrategy.getZoneId();
23   }
24
25   public static ZoneOffset getZoneOffset()
26   {
27     return offsetStrategy.getZoneOffset();
28   }
29
30
31   public static void setZoneIdStrategy(ZoneIdStrategy strategy)
32   {
33     if (strategy == null)
34       throw new IllegalArgumentException("Strategy must not be null!");
35     zoneStrategy = strategy;
36   }
37
38   public static void setZoneOffsetStrategy(ZoneOffsetStrategy strategy)
39   {
40     if (strategy == null)
41       throw new IllegalArgumentException("Strategy must not be null!");
42     offsetStrategy = strategy;
43   }
44
45
46   public interface ZoneIdStrategy
47   {
48     public ZoneId getZoneId();
49   }
50
51   public interface ZoneOffsetStrategy
52   {
53     public ZoneOffset getZoneOffset();
54   }
55
56
57   public static class SystemDefaultZoneIdStrategy
58       implements
59         ZoneIdStrategy
60   {
61     @Override
62     public ZoneId getZoneId()
63     {
64       return ZoneId.systemDefault();
65     }
66   }
67
68   public static class SystemDefaultZoneOffsetStrategy
69       implements
70         ZoneOffsetStrategy
71   {
72     @Override
73     public ZoneOffset getZoneOffset()
74     {
75       return ZoneOffset.systemDefault().getRules().getOffset(Instant.now());
76     }
77   }
78
79   public static class FixedZoneIdStrategy
80       implements
81         ZoneIdStrategy
82   {
83     private final ZoneId zone;
84
85     public FixedZoneIdStrategy(ZoneId zone)
86     {
87       this.zone = zone;
88     }
89
90     @Override
91     public ZoneId getZoneId()
92     {
93       return zone;
94     }
95   }
96
97   public static class FixedZoneOffsetStrategy
98       implements
99         ZoneOffsetStrategy
100   {
101     private final ZoneOffset offset;
102
103     public FixedZoneOffsetStrategy(ZoneOffset offset)
104     {
105       this.offset = offset;
106     }
107
108     @Override
109     public ZoneOffset getZoneOffset()
110     {
111       return offset;
112     }
113   }
114 }