|
@@ -66,22 +66,26 @@ |
66 |
66 |
|
if ( (zPlusOrMinus == '-') || (zPlusOrMinus == '+') ) |
67 |
67 |
|
{ |
68 |
68 |
|
zPart = zPart.substring( 1 ); |
69 |
|
- |
int zOffset = 0; |
70 |
69 |
|
switch ( zPart.length() ) |
71 |
70 |
|
{ |
72 |
71 |
|
case 5: |
73 |
|
- |
if ( zPart.charAt( 2 ) != ':' ) |
|
72 |
+ |
if ( zPart.charAt( 2 ) == ':' ) |
74 |
73 |
|
{ |
75 |
|
- |
break; |
|
74 |
+ |
return parseOffset( zPlusOrMinus, zPart, 2, 3, pStringForm ); |
76 |
75 |
|
} |
77 |
|
- |
zPart = zPart.substring( 0, 2 ) + zPart.substring( 3 ); |
78 |
|
- |
// Fall Thru |
|
76 |
+ |
break; |
79 |
77 |
|
case 4: |
80 |
|
- |
zOffset += parseInt( zPart.substring( 3 ), "Offset Minutes", pStringForm ); |
81 |
|
- |
zPart = zPart.substring( 0, 2 ); |
82 |
|
- |
// Fall Thru |
|
78 |
+ |
if ( zPart.charAt( 1 ) == ':' ) |
|
79 |
+ |
{ |
|
80 |
+ |
return parseOffset( zPlusOrMinus, zPart, 1, 2, pStringForm ); |
|
81 |
+ |
} |
|
82 |
+ |
return parseOffset( zPlusOrMinus, zPart, 2, 2, pStringForm ); |
|
83 |
+ |
case 3: |
|
84 |
+ |
return parseOffset( zPlusOrMinus, zPart, 1, 1, pStringForm ); |
83 |
85 |
|
case 2: |
84 |
|
- |
return zOffset + (60 * parseInt( zPart, "Offset Hours", pStringForm )); |
|
86 |
+ |
return directionalizeOffset( zPlusOrMinus, parseOffsetHours( zPart, 2, pStringForm ), 0 ); |
|
87 |
+ |
case 1: |
|
88 |
+ |
return directionalizeOffset( zPlusOrMinus, parseOffsetHours( zPart, 1, pStringForm ), 0 ); |
85 |
89 |
|
default: |
86 |
90 |
|
break; |
87 |
91 |
|
} |
|
@@ -89,6 +93,32 @@ |
89 |
93 |
|
throw new IllegalArgumentException( "Invalid Offset in: " + pStringForm ); |
90 |
94 |
|
} |
91 |
95 |
|
|
|
96 |
+ |
private static int parseOffset( char pPlusOrMinus, String pPart, int pHourUpTo, int pMinFrom, String pStringForm ) |
|
97 |
+ |
{ |
|
98 |
+ |
return parseOffset( pPlusOrMinus, parseOffsetHours( pPart, pHourUpTo, pStringForm ), pPart, pMinFrom, pStringForm ); |
|
99 |
+ |
} |
|
100 |
+ |
|
|
101 |
+ |
private static int parseOffset( char pPlusOrMinus, int pHours, String pPart, int pMinFrom, String pStringForm ) |
|
102 |
+ |
{ |
|
103 |
+ |
return directionalizeOffset( pPlusOrMinus, pHours, parseOffsetMinutes( pPart, pMinFrom, pStringForm ) ); |
|
104 |
+ |
} |
|
105 |
+ |
|
|
106 |
+ |
private static int directionalizeOffset( char pPlusOrMinus, int pHours, int pMinutes ) |
|
107 |
+ |
{ |
|
108 |
+ |
int zPositiveOffset = (60 * pHours) + pMinutes; |
|
109 |
+ |
return (pPlusOrMinus == '+') ? zPositiveOffset : -1 * zPositiveOffset; |
|
110 |
+ |
} |
|
111 |
+ |
|
|
112 |
+ |
private static int parseOffsetHours( String pPart, int pUpTo, String pStringForm ) |
|
113 |
+ |
{ |
|
114 |
+ |
return parseInt( pPart.substring( 0, pUpTo ), "Offset Hours", pStringForm ); |
|
115 |
+ |
} |
|
116 |
+ |
|
|
117 |
+ |
private static int parseOffsetMinutes( String pPart, int pFrom, String pStringForm ) |
|
118 |
+ |
{ |
|
119 |
+ |
return parseInt( pPart.substring( pFrom ), "Offset Minutes", pStringForm ); |
|
120 |
+ |
} |
|
121 |
+ |
|
92 |
122 |
|
protected static final StringBuilder tailSQLvalue( TimestampAccessorH pAccessorYMDH, boolean pAddTail, StringBuilder pSB ) |
93 |
123 |
|
{ |
94 |
124 |
|
if ( pAddTail ) |
|
@@ -176,7 +206,7 @@ |
176 |
206 |
|
} |
177 |
207 |
|
|
178 |
208 |
|
/** |
179 |
|
- |
* @param pNewMonth != current |
|
209 |
+ |
* @param pNewHour != current |
180 |
210 |
|
*/ |
181 |
211 |
|
protected final T LLsetHour( int pNewHour ) |
182 |
212 |
|
{ |