Subversion Repository Public Repository

litesoft

Diff Revisions 911 vs 912 for /trunk/Java/core/Anywhere/src/org/litesoft/core/simpletypes/temporal/AbstractTimestampH.java

Diff revisions: vs.
  @@ -2,72 +2,25 @@
2 2
3 3 import org.litesoft.core.typeutils.*;
4 4
5 - public abstract class AbstractTimestampH<T extends AbstractTimestampH, M extends AbstractTimestampH.Mutable>
6 - extends AbstractCalendarYMD<T, M>
5 + public abstract class AbstractTimestampH<T extends AbstractTimestampH, M extends AbstractTimestampH.Mutable> extends AbstractCalendarYMD<T, M>
7 6 implements TimestampAccessorH
8 7 {
9 8 private static final long serialVersionUID = 1L;
10 9
11 - private long mUTC;
12 - private int mOriginalZuluOffsetMins;
13 - private transient UtilDateAdaptor mWall;
10 + private /* final */ int mHour;
11 + private /* final */ int mZuluOffsetMins;
14 12
15 - protected AbstractTimestampH( int pOriginalZuluOffsetMins, long pUTC )
13 + protected AbstractTimestampH( int pYear, int pMonth, int pDay, int pZuluOffsetMins, int pHour )
16 14 {
17 - mOriginalZuluOffsetMins = pOriginalZuluOffsetMins;
18 - mUTC = pUTC;
19 - }
20 -
21 - protected AbstractTimestampH( int pOriginalZuluOffsetMins, UtilDateAdaptor pDateAdaptor )
22 - {
23 - this( pOriginalZuluOffsetMins, pDateAdaptor.getUTClong() );
24 - mWall = Cast.it( pDateAdaptor );
25 - }
26 -
27 - protected AbstractTimestampH( UtilDateAdaptor pDateAdaptor )
28 - {
29 - this( pDateAdaptor.getZuluOffsetMins(), pDateAdaptor );
30 - }
31 -
32 - public long getUTClong()
33 - {
34 - return mUTC;
35 - }
36 -
37 - public int getOriginalZuluOffsetMins()
38 - {
39 - return mOriginalZuluOffsetMins;
40 - }
41 -
42 - protected final synchronized UtilDateAdaptor getWall()
43 - {
44 - return (mWall != null) ? mWall : (mWall = createWall());
45 - }
46 -
47 - protected abstract UtilDateAdaptor createWall();
48 -
49 - @Override
50 - public final int getYear()
51 - {
52 - return getWall().getYear();
53 - }
54 -
55 - @Override
56 - public final int getMonth()
57 - {
58 - return getWall().getMonth();
59 - }
60 -
61 - @Override
62 - public final int getDay()
63 - {
64 - return getWall().getDay();
15 + super( pYear, pMonth, pDay );
16 + mHour = validateHour( pHour );
17 + mZuluOffsetMins = pZuluOffsetMins;
65 18 }
66 19
67 20 @Override
68 21 public final int getHour()
69 22 {
70 - return getWall().getHour();
23 + return mHour;
71 24 }
72 25
73 26 /**
  @@ -76,7 +29,7 @@
76 29 public final T hour( int pHour )
77 30 {
78 31 validateHour( pHour );
79 - return (getHour() == pHour) ? us() : LLsetHour( pHour );
32 + return (mHour == pHour) ? us() : LLsetHour( pHour );
80 33 }
81 34
82 35 /**
  @@ -84,7 +37,7 @@
84 37 */
85 38 public final T addHours( int pHours )
86 39 {
87 - return (pHours == 0) ? us() : LLsetHour( getHour() + pHours );
40 + return (pHours == 0) ? us() : LLsetHour( mHour + pHours );
88 41 }
89 42
90 43 /**
  @@ -92,12 +45,12 @@
92 45 */
93 46 public final T minusHours( int pHours )
94 47 {
95 - return (pHours == 0) ? us() : LLsetHour( getHour() - pHours );
48 + return (pHours == 0) ? us() : LLsetHour( mHour - pHours );
96 49 }
97 50
98 51 public int getZuluOffsetMins()
99 52 {
100 - return getWall().getZuluOffsetMins();
53 + return mZuluOffsetMins;
101 54 }
102 55
103 56 // vvvvvvvvvvvvvvvvvv Support methods vvvvvvvvvvvvvvvvv
  @@ -113,26 +66,22 @@
113 66 if ( (zPlusOrMinus == '-') || (zPlusOrMinus == '+') )
114 67 {
115 68 zPart = zPart.substring( 1 );
69 + int zOffset = 0;
116 70 switch ( zPart.length() )
117 71 {
118 72 case 5:
119 - if ( zPart.charAt( 2 ) == ':' )
73 + if ( zPart.charAt( 2 ) != ':' )
120 74 {
121 - return parseOffset( zPlusOrMinus, zPart, 2, 3, pStringForm );
75 + break;
122 76 }
123 - break;
77 + zPart = zPart.substring( 0, 2 ) + zPart.substring( 3 );
78 + // Fall Thru
124 79 case 4:
125 - if ( zPart.charAt( 1 ) == ':' )
126 - {
127 - return parseOffset( zPlusOrMinus, zPart, 1, 2, pStringForm );
128 - }
129 - return parseOffset( zPlusOrMinus, zPart, 2, 2, pStringForm );
130 - case 3:
131 - return parseOffset( zPlusOrMinus, zPart, 1, 1, pStringForm );
80 + zOffset += parseInt( zPart.substring( 3 ), "Offset Minutes", pStringForm );
81 + zPart = zPart.substring( 0, 2 );
82 + // Fall Thru
132 83 case 2:
133 - return directionalizeOffset( zPlusOrMinus, parseOffsetHours( zPart, 2, pStringForm ), 0 );
134 - case 1:
135 - return directionalizeOffset( zPlusOrMinus, parseOffsetHours( zPart, 1, pStringForm ), 0 );
84 + return zOffset + (60 * parseInt( zPart, "Offset Hours", pStringForm ));
136 85 default:
137 86 break;
138 87 }
  @@ -140,32 +89,6 @@
140 89 throw new IllegalArgumentException( "Invalid Offset in: " + pStringForm );
141 90 }
142 91
143 - private static int parseOffset( char pPlusOrMinus, String pPart, int pHourUpTo, int pMinFrom, String pStringForm )
144 - {
145 - return parseOffset( pPlusOrMinus, parseOffsetHours( pPart, pHourUpTo, pStringForm ), pPart, pMinFrom, pStringForm );
146 - }
147 -
148 - private static int parseOffset( char pPlusOrMinus, int pHours, String pPart, int pMinFrom, String pStringForm )
149 - {
150 - return directionalizeOffset( pPlusOrMinus, pHours, parseOffsetMinutes( pPart, pMinFrom, pStringForm ) );
151 - }
152 -
153 - private static int directionalizeOffset( char pPlusOrMinus, int pHours, int pMinutes )
154 - {
155 - int zPositiveOffset = (60 * pHours) + pMinutes;
156 - return (pPlusOrMinus == '+') ? zPositiveOffset : -1 * zPositiveOffset;
157 - }
158 -
159 - private static int parseOffsetHours( String pPart, int pUpTo, String pStringForm )
160 - {
161 - return parseInt( pPart.substring( 0, pUpTo ), "Offset Hours", pStringForm );
162 - }
163 -
164 - private static int parseOffsetMinutes( String pPart, int pFrom, String pStringForm )
165 - {
166 - return parseInt( pPart.substring( pFrom ), "Offset Minutes", pStringForm );
167 - }
168 -
169 92 protected static final StringBuilder tailSQLvalue( TimestampAccessorH pAccessorYMDH, boolean pAddTail, StringBuilder pSB )
170 93 {
171 94 if ( pAddTail )
  @@ -231,7 +154,7 @@
231 154
232 155 protected int LL_hashCode()
233 156 {
234 - return hashCodeEm( super.hashCode(), getHour() );
157 + return hashCodeEm( super.hashCode(), mHour );
235 158 }
236 159
237 160 /**
  @@ -253,7 +176,7 @@
253 176 }
254 177
255 178 /**
256 - * @param pNewHour != current
179 + * @param pNewMonth != current
257 180 */
258 181 protected final T LLsetHour( int pNewHour )
259 182 {
  @@ -264,16 +187,39 @@
264 187
265 188 protected abstract M createMutable( int pYear, int pMonth, int pDay, int pNewHour );
266 189
267 - protected static class Mutable extends AbstractCalendarYMD.Mutable
190 + protected static class Mutable extends AbstractCalendarYMD.Mutable implements TimestampAccessorH
268 191 {
192 + private final int mZuluOffsetMins;
269 193 protected int mHour;
270 194
271 - public Mutable( int pYear, int pMonth, int pDay, boolean pDayConstrained, int pHour )
195 + public Mutable( int pYear, int pMonth, int pDay, boolean pDayConstrained, int pZuluOffsetMins, int pHour )
272 196 {
273 197 super( pYear, pMonth, pDay, pDayConstrained );
198 + mZuluOffsetMins = pZuluOffsetMins;
274 199 mHour = pHour;
275 200 }
276 201
202 + @Override
203 + public int getZuluOffsetMins()
204 + {
205 + return mZuluOffsetMins;
206 + }
207 +
208 + public void fromWallToZulu()
209 + {
210 + adjustMinutesTo( -UtilDateAdaptor.calculateCurrentUTCtoWallOffsetMinutes() );
211 + }
212 +
213 + public void fromZuluToWall()
214 + {
215 + adjustMinutesTo( UtilDateAdaptor.calculateCurrentUTCtoWallOffsetMinutes() );
216 + }
217 +
218 + public void fromOriginalWallToWall()
219 + {
220 + adjustMinutesTo( UtilDateAdaptor.calculateCurrentUTCtoWallOffsetMinutes() - getZuluOffsetMins() );
221 + }
222 +
277 223 public final int getHour()
278 224 {
279 225 return mHour;
  @@ -320,11 +266,11 @@
320 266 incrementDay();
321 267 }
322 268
323 - public void adjustOrigWallToZulu( int pOffsetMinsAdjustment )
269 + protected void adjustMinutesTo( int pOffsetMinsAdjustment )
324 270 {
325 271 if ( pOffsetMinsAdjustment != 0 )
326 272 {
327 - mHour -= pOffsetMinsAdjustment / 60; // Hours Offset
273 + mHour += pOffsetMinsAdjustment / 60; // Hours Offset
328 274 normalize();
329 275 }
330 276 }