|
@@ -18,17 +18,22 @@ |
18 |
18 |
|
mFieldOrder = pFieldOrder; |
19 |
19 |
|
} |
20 |
20 |
|
|
21 |
|
- |
public SimpleDate parseDate( String pDateFormat, String pText, UtilDateAdaptor pInadequatePartsSource ) |
|
21 |
+ |
public String getFieldOrder() |
|
22 |
+ |
{ |
|
23 |
+ |
return mFieldOrder; |
|
24 |
+ |
} |
|
25 |
+ |
|
|
26 |
+ |
public SimpleDate parseDate( String pText, DateRes pDateRes, UtilDateAdaptor pInadequatePartsSource ) throws IllegalArgumentException |
22 |
27 |
|
{ |
23 |
28 |
|
String zWhat = "Date"; |
24 |
29 |
|
List<PartCollector> zParts = LLparseToParts( pText, true ); |
25 |
30 |
|
LLpadPartsForDate( zParts, pInadequatePartsSource ); |
26 |
31 |
|
AbstractRealPC[] realPCs = LLinitialPartsValidate( pText, zParts, zWhat, 3 ); |
27 |
32 |
|
LLpartsValidateForDate( realPCs, zWhat ); |
28 |
|
- |
return LLparseDate( pDateFormat, realPCs, zWhat ); |
|
33 |
+ |
return LLparseDate( realPCs, pDateRes, zWhat ); |
29 |
34 |
|
} |
30 |
35 |
|
|
31 |
|
- |
public SimpleTimestamp parseTimestamp( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource ) |
|
36 |
+ |
public SimpleTimestamp parseTimestamp( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource ) throws IllegalArgumentException |
32 |
37 |
|
{ |
33 |
38 |
|
String zWhat = "Timestamp"; |
34 |
39 |
|
List<PartCollector> zParts = LLparseToParts( pText, true ); |
|
@@ -36,12 +41,12 @@ |
36 |
41 |
|
AbstractRealPC[] realPCs = LLinitialPartsValidate( pText, zParts, zWhat, 3 + pTimeFields ); |
37 |
42 |
|
LLpartsValidateForDate( realPCs, zWhat ); |
38 |
43 |
|
LLpartsValidateForTime( pText, realPCs, 3, pTimeFields ); |
39 |
|
- |
SimpleDate date = LLparseDate( "yyyy-MM-dd", realPCs, zWhat ); |
|
44 |
+ |
SimpleDate date = LLparseDate( realPCs, DateRes.ToDAY, zWhat ); |
40 |
45 |
|
SimpleTime time = LLparseTime( realPCs, 3, pTimeFields ); |
41 |
46 |
|
return new SimpleTimestamp( date, time ); |
42 |
47 |
|
} |
43 |
48 |
|
|
44 |
|
- |
public SimpleTime parseTime( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource ) |
|
49 |
+ |
public SimpleTime parseTime( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource ) throws IllegalArgumentException |
45 |
50 |
|
{ |
46 |
51 |
|
String zWhat = "Time"; |
47 |
52 |
|
List<PartCollector> zParts = LLparseToParts( pText, false ); |
|
@@ -103,7 +108,7 @@ |
103 |
108 |
|
{ |
104 |
109 |
|
case 1: // assume Day only, add month |
105 |
110 |
|
pInadequatePartsSource = ensurePartsSource( pInadequatePartsSource ); |
106 |
|
- |
pParts.add( new MonthAsTextPC( Month.nameFromMonthNumber(pInadequatePartsSource.getMonth()) ) ); |
|
111 |
+ |
pParts.add( new MonthAsTextPC( Month.nameFromMonthNumber( pInadequatePartsSource.getMonth() ) ) ); |
107 |
112 |
|
case 2: // assume Month & Day, add Year |
108 |
113 |
|
pInadequatePartsSource = ensurePartsSource( pInadequatePartsSource ); |
109 |
114 |
|
pParts.add( new NumericPC( "" + pInadequatePartsSource.getYear() ) ); |
|
@@ -245,7 +250,7 @@ |
245 |
250 |
|
} |
246 |
251 |
|
} |
247 |
252 |
|
|
248 |
|
- |
private SimpleDate LLparseDate( String pDateFormat, AbstractRealPC[] pParts, String pWhat ) |
|
253 |
+ |
private SimpleDate LLparseDate( AbstractRealPC[] pParts, DateRes pDateRes, String pWhat ) |
249 |
254 |
|
{ |
250 |
255 |
|
int zSwitchValue = 0; |
251 |
256 |
|
int bucketFactor = 1; |
|
@@ -269,54 +274,54 @@ |
269 |
274 |
|
{ |
270 |
275 |
|
case B0_IS_MONTH + B1_OPT_YEAR + B2_OPT_YEARorMONTHorDAY: |
271 |
276 |
|
case B0_IS_MONTH + B1_OPT_YEAR + B2_OPT_YEARorDAY: |
272 |
|
- |
return toDate( pDateFormat, pParts, 1, 0, 2 ); |
|
277 |
+ |
return toDate( pDateRes, pParts, 1, 0, 2 ); |
273 |
278 |
|
|
274 |
279 |
|
case B0_IS_MONTH + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEAR: |
275 |
280 |
|
case B0_IS_MONTH + B1_OPT_YEARorDAY + B2_OPT_YEAR: |
276 |
|
- |
return toDate( pDateFormat, pParts, 2, 0, 1 ); |
|
281 |
+ |
return toDate( pDateRes, pParts, 2, 0, 1 ); |
277 |
282 |
|
|
278 |
283 |
|
case B0_IS_MONTH + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorDAY: |
279 |
284 |
|
case B0_IS_MONTH + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorMONTHorDAY: |
280 |
285 |
|
case B0_IS_MONTH + B1_OPT_YEARorDAY + B2_OPT_YEARorMONTHorDAY: |
281 |
286 |
|
case B0_IS_MONTH + B1_OPT_YEARorDAY + B2_OPT_YEARorDAY: |
282 |
287 |
|
default: |
283 |
|
- |
return isYearBeforeDay() ? toDate( pDateFormat, pParts, 1, 0, 2 ) : toDate( pDateFormat, pParts, 2, 0, 1 ); |
|
288 |
+ |
return isYearBeforeDay() ? toDate( pDateRes, pParts, 1, 0, 2 ) : toDate( pDateRes, pParts, 2, 0, 1 ); |
284 |
289 |
|
} |
285 |
290 |
|
case 1: |
286 |
291 |
|
switch ( zSwitchValue ) |
287 |
292 |
|
{ |
288 |
293 |
|
case B0_OPT_YEAR + B1_IS_MONTH + B2_OPT_YEARorMONTHorDAY: |
289 |
294 |
|
case B0_OPT_YEAR + B1_IS_MONTH + B2_OPT_YEARorDAY: |
290 |
|
- |
return toDate( pDateFormat, pParts, 0, 1, 2 ); |
|
295 |
+ |
return toDate( pDateRes, pParts, 0, 1, 2 ); |
291 |
296 |
|
|
292 |
297 |
|
case B0_OPT_YEARorMONTHorDAY + B1_IS_MONTH + B2_OPT_YEAR: |
293 |
298 |
|
case B0_OPT_YEARorDAY + B1_IS_MONTH + B2_OPT_YEAR: |
294 |
|
- |
return toDate( pDateFormat, pParts, 2, 1, 0 ); |
|
299 |
+ |
return toDate( pDateRes, pParts, 2, 1, 0 ); |
295 |
300 |
|
|
296 |
301 |
|
case B0_OPT_YEARorMONTHorDAY + B1_IS_MONTH + B2_OPT_YEARorDAY: |
297 |
302 |
|
case B0_OPT_YEARorMONTHorDAY + B1_IS_MONTH + B2_OPT_YEARorMONTHorDAY: |
298 |
303 |
|
case B0_OPT_YEARorDAY + B1_IS_MONTH + B2_OPT_YEARorMONTHorDAY: |
299 |
304 |
|
case B0_OPT_YEARorDAY + B1_IS_MONTH + B2_OPT_YEARorDAY: |
300 |
305 |
|
default: |
301 |
|
- |
return isYearBeforeMonth() ? toDate( pDateFormat, pParts, 0, 1, 2 ) : toDate( pDateFormat, pParts, 2, 1, 0 ); |
|
306 |
+ |
return isYearBeforeMonth() ? toDate( pDateRes, pParts, 0, 1, 2 ) : toDate( pDateRes, pParts, 2, 1, 0 ); |
302 |
307 |
|
} |
303 |
308 |
|
case 2: |
304 |
309 |
|
switch ( zSwitchValue ) |
305 |
310 |
|
{ |
306 |
311 |
|
case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEAR + B2_IS_MONTH: |
307 |
312 |
|
case B0_OPT_YEARorDAY + B1_OPT_YEAR + B2_IS_MONTH: |
308 |
|
- |
return toDate( pDateFormat, pParts, 1, 2, 0 ); |
|
313 |
+ |
return toDate( pDateRes, pParts, 1, 2, 0 ); |
309 |
314 |
|
|
310 |
315 |
|
case B0_OPT_YEAR + B1_OPT_YEARorMONTHorDAY + B2_IS_MONTH: |
311 |
316 |
|
case B0_OPT_YEAR + B1_OPT_YEARorDAY + B2_IS_MONTH: |
312 |
|
- |
return toDate( pDateFormat, pParts, 0, 2, 1 ); |
|
317 |
+ |
return toDate( pDateRes, pParts, 0, 2, 1 ); |
313 |
318 |
|
|
314 |
319 |
|
case B0_OPT_YEARorDAY + B1_OPT_YEARorMONTHorDAY + B2_IS_MONTH: |
315 |
320 |
|
case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorMONTHorDAY + B2_IS_MONTH: |
316 |
321 |
|
case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorDAY + B2_IS_MONTH: |
317 |
322 |
|
case B0_OPT_YEARorDAY + B1_OPT_YEARorDAY + B2_IS_MONTH: |
318 |
323 |
|
default: |
319 |
|
- |
return isYearBeforeDay() ? toDate( pDateFormat, pParts, 0, 2, 1 ) : toDate( pDateFormat, pParts, 1, 0, 2 ); |
|
324 |
+ |
return isYearBeforeDay() ? toDate( pDateRes, pParts, 0, 2, 1 ) : toDate( pDateRes, pParts, 1, 0, 2 ); |
320 |
325 |
|
} |
321 |
326 |
|
default: |
322 |
327 |
|
switch ( zSwitchValue ) |
|
@@ -324,29 +329,29 @@ |
324 |
329 |
|
case B0_OPT_YEAR + B1_OPT_YEARorDAY + B2_OPT_YEARorDAY: |
325 |
330 |
|
break; |
326 |
331 |
|
case B0_OPT_YEAR + B1_OPT_YEARorDAY + B2_OPT_YEARorMONTHorDAY: |
327 |
|
- |
return toDate( pDateFormat, pParts, 0, 2, 1 ); |
|
332 |
+ |
return toDate( pDateRes, pParts, 0, 2, 1 ); |
328 |
333 |
|
case B0_OPT_YEAR + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorDAY: |
329 |
|
- |
return toDate( pDateFormat, pParts, 0, 1, 2 ); |
|
334 |
+ |
return toDate( pDateRes, pParts, 0, 1, 2 ); |
330 |
335 |
|
case B0_OPT_YEAR + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorMONTHorDAY: |
331 |
|
- |
return isDayBeforeMonth() ? toDate( pDateFormat, pParts, 0, 2, 1 ) : toDate( pDateFormat, pParts, 0, 1, 2 ); |
|
336 |
+ |
return isDayBeforeMonth() ? toDate( pDateRes, pParts, 0, 2, 1 ) : toDate( pDateRes, pParts, 0, 1, 2 ); |
332 |
337 |
|
|
333 |
338 |
|
case B0_OPT_YEARorDAY + B1_OPT_YEAR + B2_OPT_YEARorDAY: |
334 |
339 |
|
break; |
335 |
340 |
|
case B0_OPT_YEARorDAY + B1_OPT_YEAR + B2_OPT_YEARorMONTHorDAY: |
336 |
|
- |
return toDate( pDateFormat, pParts, 1, 2, 0 ); |
|
341 |
+ |
return toDate( pDateRes, pParts, 1, 2, 0 ); |
337 |
342 |
|
case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEAR + B2_OPT_YEARorDAY: |
338 |
|
- |
return toDate( pDateFormat, pParts, 1, 0, 2 ); |
|
343 |
+ |
return toDate( pDateRes, pParts, 1, 0, 2 ); |
339 |
344 |
|
case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEAR + B2_OPT_YEARorMONTHorDAY: |
340 |
|
- |
return isDayBeforeMonth() ? toDate( pDateFormat, pParts, 1, 2, 0 ) : toDate( pDateFormat, pParts, 1, 0, 2 ); |
|
345 |
+ |
return isDayBeforeMonth() ? toDate( pDateRes, pParts, 1, 2, 0 ) : toDate( pDateRes, pParts, 1, 0, 2 ); |
341 |
346 |
|
|
342 |
347 |
|
case B0_OPT_YEARorDAY + B1_OPT_YEARorDAY + B2_OPT_YEAR: |
343 |
348 |
|
break; |
344 |
349 |
|
case B0_OPT_YEARorDAY + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEAR: |
345 |
|
- |
return toDate( pDateFormat, pParts, 2, 1, 0 ); |
|
350 |
+ |
return toDate( pDateRes, pParts, 2, 1, 0 ); |
346 |
351 |
|
case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorDAY + B2_OPT_YEAR: |
347 |
|
- |
return toDate( pDateFormat, pParts, 2, 0, 1 ); |
|
352 |
+ |
return toDate( pDateRes, pParts, 2, 0, 1 ); |
348 |
353 |
|
case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEAR: |
349 |
|
- |
return isDayBeforeMonth() ? toDate( pDateFormat, pParts, 2, 1, 0 ) : toDate( pDateFormat, pParts, 2, 0, 1 ); |
|
354 |
+ |
return isDayBeforeMonth() ? toDate( pDateRes, pParts, 2, 1, 0 ) : toDate( pDateRes, pParts, 2, 0, 1 ); |
350 |
355 |
|
default: |
351 |
356 |
|
break; |
352 |
357 |
|
} |
|
@@ -364,11 +369,21 @@ |
364 |
369 |
|
return new IllegalArgumentException( zWhy ); |
365 |
370 |
|
} |
366 |
371 |
|
|
367 |
|
- |
private SimpleDate toDate( String pDateFormat, // |
|
372 |
+ |
private SimpleDate toDate( DateRes pDateRes, // |
368 |
373 |
|
AbstractRealPC[] pParts, int pYearNdx, int pMonthNdx, int pDayNdx ) |
369 |
374 |
|
{ |
370 |
|
- |
return new SimpleDate( null, // TODO: XXX pDateFormat, |
371 |
|
- |
pParts[pYearNdx].getYear(), pParts[pMonthNdx].getMonth(), pParts[pDayNdx].getDay() ); |
|
375 |
+ |
int zYear = pParts[pYearNdx].getYear(); |
|
376 |
+ |
int zMonth = pParts[pMonthNdx].getMonth(); |
|
377 |
+ |
int zDay = pParts[pDayNdx].getDay(); |
|
378 |
+ |
if ( pDateRes.isValidToDay() ) |
|
379 |
+ |
{ |
|
380 |
+ |
return new SimpleDate( zYear, zMonth, zDay ); |
|
381 |
+ |
} |
|
382 |
+ |
if ( pDateRes.isValidToMonth() ) |
|
383 |
+ |
{ |
|
384 |
+ |
return new SimpleDate( zYear, zMonth ); |
|
385 |
+ |
} |
|
386 |
+ |
return new SimpleDate( zYear ); |
372 |
387 |
|
} |
373 |
388 |
|
|
374 |
389 |
|
private transient LateBooleanFieldOrder mYearBeforeMonth = new LateBooleanFieldOrder(); |