1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /********************************************************************
5 * Copyright (c) 1997-2014, International Business Machines Corporation and
6 * others. All Rights Reserved.
7 ********************************************************************/
8 /********************************************************************************
12 * Madhu Katragadda Ported for C API
13 * Modification History:
14 * Date Name Description
15 * 07/15/99 helena Ported to HPUX 10/11 CC.
16 *********************************************************************************
18 /* REGRESSION TEST FOR DATE FORMAT */
20 #include "unicode/utypes.h"
22 #if !UCONFIG_NO_FORMATTING
24 #include "unicode/uloc.h"
25 #include "unicode/udat.h"
26 #include "unicode/ucal.h"
27 #include "unicode/unum.h"
28 #include "unicode/ustring.h"
33 void addDateForRgrTest(TestNode
** root
);
35 void addDateForRgrTest(TestNode
** root
)
37 addTest(root
, &Test4029195
, "tsformat/cdtrgtst/Test4029195");
38 addTest(root
, &Test4056591
, "tsformat/cdtrgtst/Test4056591");
39 addTest(root
, &Test4059917
, "tsformat/cdtrgtst/Test4059917");
40 addTest(root
, &Test4060212
, "tsformat/cdtrgtst/Test4060212");
41 addTest(root
, &Test4061287
, "tsformat/cdtrgtst/Test4061287");
42 addTest(root
, &Test4073003
, "tsformat/cdtrgtst/Test4073003");
43 addTest(root
, &Test4162071
, "tsformat/cdtrgtst/Test4162071");
44 addTest(root
, &Test714
, "tsformat/cdtrgtst/Test714");
45 addTest(root
, &Test_GEec
, "tsformat/cdtrgtst/Test_GEec"); /* tests for format chars GEec, jitterbugs 5726 6072 6585 */
53 int32_t resultlength
, resultlengthneeded
;
54 UChar
*fmdt
, *todayS
, *rt
;
60 UErrorCode status
= U_ZERO_ERROR
;
62 log_verbose("Testing date format and parse function in regression test\n");
63 today
= ucal_getNow();
65 df
= udat_open(UDAT_DEFAULT
,UDAT_DEFAULT
,"en_US", NULL
, 0, NULL
, 0, &status
);
68 log_data_err("FAIL: error in creating the dateformat using default date and time style : %s (Are you missing data?)\n", myErrorName(status
));
72 resultlengthneeded
=udat_toPattern(df
, TRUE
, NULL
, resultlength
, &status
);
73 if(status
==U_BUFFER_OVERFLOW_ERROR
)
76 resultlength
=resultlengthneeded
+ 1;
77 pat
=(UChar
*)malloc(sizeof(UChar
) * resultlength
);
78 udat_toPattern(df
, TRUE
, pat
, resultlength
, &status
);
81 log_verbose("pattern: %s\n", austrdup(pat
));
84 fmdt
= myFormatit(df
, today
);
86 log_verbose("today: %s\n", austrdup(fmdt
));
88 log_data_err("ERROR: couldn't format, exitting test");
92 temp
=(UChar
*)malloc(sizeof(UChar
) * 10);
93 u_uastrcpy(temp
, "M yyyy dd");
94 udat_applyPattern(df
, TRUE
, temp
, u_strlen(temp
));
96 todayS
=myFormatit(df
, today
);
97 log_verbose("After the pattern is applied\n today: %s\n", austrdup(todayS
) );
99 d1
=udat_parse(df
, todayS
, u_strlen(todayS
), &parsepos
, &status
);
100 if(U_FAILURE(status
))
102 log_err("FAIL: Error in parsing using udat_parse(.....): %s\n", myErrorName(status
));
105 rt
=myFormatit(df
, d1
);
106 log_verbose("today: %s\n", austrdup(rt
) );
108 log_verbose("round trip: %s\n", austrdup(rt
) );
110 if(u_strcmp(rt
, todayS
)!=0) {
111 log_err("Fail: Want %s Got %s\n", austrdup(todayS
), austrdup(rt
) );
114 log_verbose("Pass: parse and format working fine\n");
125 * Verify the function of the [s|g]et2DigitYearStart() API.
134 UChar
*gotdate
, *expdate
;
137 UErrorCode status
= U_ZERO_ERROR
;
138 const char* strings
[] = {
145 log_verbose("Testing s[get] 2 digit year start regressively\n");
146 cal
=ucal_open(NULL
, 0, "en_US", UCAL_GREGORIAN
, &status
);
147 if(U_FAILURE(status
)){
148 log_data_err("error in ucal_open caldef : %s - (Are you missing data?)\n", myErrorName(status
));
151 ucal_setDateTime(cal
, 1809, UCAL_DECEMBER
, 25, 17, 40, 30, &status
);
152 d
[0]=ucal_getMillis(cal
, &status
);
153 if(U_FAILURE(status
)){
154 log_err("Error: failure in get millis: %s\n", myErrorName(status
));
156 ucal_setDateTime(cal
, 1909, UCAL_DECEMBER
, 24, 17, 40, 30, &status
);
157 d
[1]=ucal_getMillis(cal
, &status
);
158 ucal_setDateTime(cal
, 1861, UCAL_DECEMBER
, 26, 17, 40, 30, &status
);
159 d
[2]=ucal_getMillis(cal
, &status
);
160 ucal_setDateTime(cal
, 1999, UCAL_DECEMBER
, 27, 17, 40, 30, &status
);
161 d
[3]=ucal_getMillis(cal
, &status
);
164 u_uastrcpy(pat
, "yyMMdd");
165 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
, NULL
, 0, pat
, u_strlen(pat
), &status
);
166 if(U_FAILURE(status
))
168 log_data_err("FAIL: error in creating the dateformat using u_openPattern(): %s - (Are you missing data?)\n", myErrorName(status
));
173 udat_set2DigitYearStart(def
, start
, &status
);
174 if(U_FAILURE(status
))
175 log_err("ERROR: in setTwoDigitStartDate: %s\n", myErrorName(status
));
176 if( (udat_get2DigitYearStart(def
, &status
) != start
))
177 log_err("ERROR: get2DigitYearStart broken\n");
180 for(i
= 0; i
< 4; ++i
) {
181 u_uastrcpy(s
, strings
[i
]);
183 got
= udat_parse(def
, s
, u_strlen(s
), 0, &status
);
184 gotdate
=myFormatit(def
, got
);
185 expdate
=myFormatit(def
, exp
);
187 if (gotdate
== NULL
|| expdate
== NULL
) {
188 log_err("myFormatit failed!\n");
190 else if(u_strcmp(gotdate
, expdate
) !=0){
191 log_err("set2DigitYearStart broken for %s \n got: %s, expected: %s\n", austrdup(s
),
192 austrdup(gotdate
), austrdup(expdate
) );
202 * SimpleDateFormat does not properly parse date strings without delimiters
209 UErrorCode status
= U_ZERO_ERROR
;
213 log_verbose("Testing apply pattern and to pattern regressively\n");
214 u_uastrcpy(tzID
, "PST");
215 u_uastrcpy(pattern
, "yyyy/MM/dd");
216 log_verbose("%s\n", austrdup(pattern
) );
217 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,tzID
,-1,pattern
, u_strlen(pattern
),&status
);
218 if(U_FAILURE(status
))
220 log_data_err("FAIL: error in creating the dateformat using openPattern: %s - (Are you missing data?)\n", myErrorName(status
));
223 myDate
=(UChar
*)malloc(sizeof(UChar
) * 11);
224 u_uastrcpy(myDate
, "1970/01/12");
226 aux917( def
, myDate
);
229 u_uastrcpy(pattern
, "yyyyMMdd");
230 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,tzID
,-1,pattern
, u_strlen(pattern
),&status
);
231 if(U_FAILURE(status
))
233 log_err("FAIL: error in creating the dateformat using openPattern: %s\n", myErrorName(status
));
236 u_uastrcpy(myDate
, "19700112");
237 aux917( def
, myDate
);
242 void aux917( UDateFormat
*fmt
, UChar
* str
)
244 int32_t resultlength
, resultlengthneeded
;
245 UErrorCode status
= U_ZERO_ERROR
;
246 UChar
* formatted
=NULL
;
248 UDate d1
=1000000000.0;
251 resultlengthneeded
=udat_toPattern(fmt
, TRUE
, NULL
, resultlength
, &status
);
252 if(status
==U_BUFFER_OVERFLOW_ERROR
)
255 resultlength
=resultlengthneeded
+ 1;
256 pat
=(UChar
*)malloc(sizeof(UChar
) * (resultlength
));
257 udat_toPattern(fmt
, TRUE
, pat
, resultlength
, &status
);
259 if(U_FAILURE(status
)){
260 log_err("failure in retrieving the pattern: %s\n", myErrorName(status
));
262 log_verbose("pattern: %s\n", austrdup(pat
) );
264 status
= U_ZERO_ERROR
;
265 formatted
= myFormatit(fmt
, d1
);
266 if( u_strcmp(formatted
,str
)!=0) {
267 log_err("Fail: Want %s Got: %s\n", austrdup(str
), austrdup(formatted
) );
279 UDateFormat
*formatter
, *fmt
;
280 UErrorCode status
= U_ZERO_ERROR
;
283 UChar dateString
[30], pattern
[20], tzID
[4];
284 u_uastrcpy(dateString
, "1995-040.05:01:29 -8");
285 u_uastrcpy(pattern
, "yyyy-DDD.hh:mm:ss z");
287 log_verbose( "dateString= %s Using yyyy-DDD.hh:mm:ss\n", austrdup(dateString
) );
288 status
= U_ZERO_ERROR
;
289 u_uastrcpy(tzID
, "PST");
291 formatter
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,"en_US",tzID
,-1,pattern
, u_strlen(pattern
), &status
);
293 myDate
= udat_parse(formatter
, dateString
, u_strlen(dateString
), &pos
, &status
);
296 fmt
= udat_open(UDAT_FULL
,UDAT_LONG
,NULL
, tzID
, -1, NULL
, 0, &status
);
297 if(U_FAILURE(status
))
299 log_data_err("FAIL: error in creating the dateformat using default date and time style: %s - (Are you missing data?)\n",
300 myErrorName(status
) );
303 myString
= myFormatit(fmt
, myDate
);
304 (void)myString
; /* Suppress set but not used warning. */
305 cal
=ucal_open(tzID
, u_strlen(tzID
), "en_US", UCAL_GREGORIAN
, &status
);
306 if(U_FAILURE(status
)){
307 log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status
));
309 ucal_setMillis(cal
, myDate
, &status
);
310 if ((ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
) != 40)){
311 log_err("Fail: Got %d Expected 40\n", ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
));
314 udat_close(formatter
);
328 UErrorCode status
= U_ZERO_ERROR
;
330 UChar pattern
[21], dateString
[11];
332 u_uastrcpy(dateString
, "35/13/1971");
333 u_uastrcpy(pattern
, "dd/mm/yyyy");
334 status
= U_ZERO_ERROR
;
335 log_verbose("Testing parsing by changing the attribute lenient\n");
336 df
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,NULL
,0,pattern
, u_strlen(pattern
),&status
);
337 if(U_FAILURE(status
)){
338 log_data_err("ERROR: failure in open pattern of test4061287: %s - (Are you missing data?)\n", myErrorName(status
));
344 udat_setLenient(df
, FALSE
);
345 ok
=udat_isLenient(df
);
347 log_err("setLenient nor working\n");
349 myDate
= udat_parse(df
, dateString
, u_strlen(dateString
), &pos
, &status
);
350 (void)myDate
; /* Suppress set but not used warning. */
351 if(U_FAILURE(status
))
354 log_err("Fail: Lenient not working: does lenient parsing in spite of setting Leninent as FALSE ");
362 /* The java.text.DateFormat.parse(String) method expects for the
363 US locale a string formatted according to mm/dd/yy and parses it
366 When given a string mm/dd/yyyy it only parses up to the first
367 two y's, typically resulting in a date in the year 1919.
369 Please extend the parsing method(s) to handle strings with
370 four-digit year values (probably also applicable to various
381 UErrorCode status
= U_ZERO_ERROR
;
383 UChar
*result
, *result2
;
384 const char* tests
[] = {
391 fmt
= udat_open(UDAT_SHORT
,UDAT_SHORT
,NULL
, NULL
, 0, NULL
, 0, &status
);
392 if(U_FAILURE(status
))
394 log_data_err("FAIL: error in creating the dateformat using short date and time style: %s (Are you missing data?)\n",
395 myErrorName(status
));
398 u_uastrcpy(temp
, "m/D/yy");
399 udat_applyPattern(fmt
, FALSE
, temp
, u_strlen(temp
));
401 for(i
= 0; i
< 4; i
+=2) {
403 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
])+1));
404 u_uastrcpy(datestr
, tests
[i
]);
407 d
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
408 if(U_FAILURE(status
)){
409 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
413 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
+1])+1));
414 u_uastrcpy(datestr
, tests
[i
+1]);
418 dd
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
419 if(U_FAILURE(status
)){
420 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
424 result
=myFormatit(fmt
, d
);
425 result2
=myFormatit(fmt
, dd
);
426 if(!result
|| !result2
) {
427 log_data_err("Fail: could not format - exitting test\n");
430 if (u_strcmp(result
, result2
)!=0){
431 log_err("Fail: %s != %s\n", austrdup(result
), austrdup(result2
) );
434 log_verbose("Ok: %s == %s\n", austrdup(result
), austrdup(result2
) );
448 UErrorCode status
= U_ZERO_ERROR
;
452 u_uastrcpy(datestr
, "Thu, 30-Jul-1999 11:51:14 GMT");
453 u_uastrcpy(format
, "EEE', 'dd-MMM-yyyy HH:mm:ss z"); /* RFC 822/1123 */
454 status
= U_ZERO_ERROR
;
455 /* Can't hardcode the result to assume the default locale is "en_US". */
456 df
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,"en_US",NULL
,0,format
, u_strlen(format
),&status
);
457 if(U_FAILURE(status
)){
458 log_data_err("ERROR: couldn't create date format: %s\n", myErrorName(status
));
462 x
= udat_parse(df
, datestr
, u_strlen(datestr
), &pos
, &status
);
463 (void)x
; /* Suppress set but not used warning. */
464 if(U_FAILURE(status
)){
465 log_data_err("ERROR : parse format %s fails : %s\n", austrdup(format
), myErrorName(status
));
468 log_verbose("Parse format \"%s \" ok.\n", austrdup(format
) );
470 /*log_verbose("date= %s\n", austrdup(myFormatit(df, x)) );*/
476 UDate d
=978103543000.0;
478 UErrorCode status
= U_ZERO_ERROR
;
481 const char* expect
= "7:25:43 AM";
483 ctest_setTimeZone(NULL
, &status
);
485 fmt
= udat_open(UDAT_MEDIUM
,UDAT_NONE
,"en_US_CA", NULL
, -1, NULL
, 0, &status
);
486 if(U_FAILURE(status
))
488 log_data_err("FAIL: error in creating the dateformat using medium time style and NO date style: %s (Are you missing data?)\n",
489 myErrorName(status
));
492 result
=myFormatit(fmt
, d
);
494 log_data_err("Fail: could not format - exitting test\n");
497 u_uastrcpy(temp
, expect
);
498 if (u_strcmp(result
, temp
)!=0){
499 log_err("Fail: %s != %s\n", austrdup(result
), expect
);
502 log_verbose("Ok: %s == %s\n", austrdup(result
), expect
);
507 ctest_resetTimeZone();
510 enum { DATE_TEXT_MAX_CHARS
= 64 };
511 static const UChar zonePST
[] = { 0x50,0x53,0x54,0 }; /* "PST" */
512 static const UDate july022008
= 1215000001979.0; /* 02 July 2008 5:00:01.979 AM PDT (near ICU 4.0 release date :-) */
513 static const double dayMillisec
= 8.64e+07;
515 static const UChar dMyGGGPattern
[] = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0 }; /* "dd MMM yyyy GGG" */
516 static const UChar dMyGGGGGPattern
[] = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0x47,0x47,0 }; /* "dd MMM yyyy GGGGG" */
517 static const UChar dMyGGGText
[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0x44,0 }; /* "02 Jul 2008 AD" */
518 static const UChar dMyGGGGGText
[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0 }; /* "02 Jul 2008 A" */
519 static const UChar edMyPattern
[] = { 0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "e dd MMM yyyy" */
520 static const UChar eedMyPattern
[] = { 0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "ee dd MMM yyyy" */
521 static const UChar cdMyPattern
[] = { 0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "c dd MMM yyyy" */
522 static const UChar ccdMyPattern
[] = { 0x63,0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "cc dd MMM yyyy" */
523 static const UChar edMyText
[] = { 0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "4 02 Jul 2008" */
524 static const UChar eedMyText
[] = { 0x30,0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "04 02 Jul 2008" */
525 static const UChar eeedMyPattern
[] = { 0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eee dd MMM yyyy" */
526 static const UChar EEEdMyPattern
[] = { 0x45,0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EEE dd MMM yyyy" */
527 static const UChar EEdMyPattern
[] = { 0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EE dd MMM yyyy" */
528 static const UChar eeedMyText
[] = { 0x57,0x65,0x64,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "Wed 02 Jul 2008" */
529 static const UChar eeeedMyPattern
[] = { 0x65,0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eeee dd MMM yyyy" */
530 static const UChar eeeedMyText
[] = { 0x57,0x65,0x64,0x6E,0x65,0x73,0x64,0x61,0x79,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "Wednesday 02 Jul 2008" */
531 static const UChar eeeeedMyPattern
[] = { 0x65,0x65,0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eeeee dd MMM yyyy" */
532 static const UChar eeeeedMyText
[] = { 0x57,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "W 02 Jul 2008" */
533 static const UChar ewYPattern
[] = { 0x65,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 }; /* "e ww YYYY" */
534 static const UChar cwYPattern
[] = { 0x63,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 }; /* "c ww YYYY" */
535 static const UChar ewYText
[] = { 0x34,0x20,0x32,0x37,0x20,0x32,0x30,0x30,0x38,0 }; /* "4 27 2008" */
536 static const UChar HHmmssPattern
[] = { 0x48,0x48,0x3A,0x6D,0x6D,0x3A,0x73,0x73,0 }; /* "HH:mm:ss" */
537 static const UChar HHmmssText
[] = { 0x30,0x35,0x3A,0x30,0x30,0x3A,0x30,0x31,0 }; /* "05:00:01" */
538 static const UChar ssSPattern
[] = { 0x73,0x73,0x2E,0x53,0 }; /* "ss.S" */
539 static const UChar ssSText
[] = { 0x30,0x31,0x2E,0x39,0 }; /* "01.9" */
540 static const UChar ssSSPattern
[] = { 0x73,0x73,0x2E,0x53,0x53,0 }; /* "ss.SS" */
541 static const UChar ssSSText
[] = { 0x30,0x31,0x2E,0x39,0x37,0 }; /* "01.97" */
544 const UChar
* pattern
;
547 } DatePatternAndText
;
548 static const DatePatternAndText datePatternsAndText
[] = {
549 { dMyGGGPattern
, dMyGGGText
, "dd MMM yyyy GGG" },
550 { dMyGGGGGPattern
, dMyGGGGGText
, "dd MMM yyyy GGGGG" },
551 { edMyPattern
, edMyText
, "e dd MMM yyyy" },
552 { eedMyPattern
, eedMyText
, "ee dd MMM yyyy" },
553 { cdMyPattern
, edMyText
, "c dd MMM yyyy" },
554 { ccdMyPattern
, edMyText
, "cc dd MMM yyyy" },
555 { eeedMyPattern
, eeedMyText
, "eee dd MMM yyyy" },
556 { EEEdMyPattern
, eeedMyText
, "EEE dd MMM yyyy" },
557 { EEdMyPattern
, eeedMyText
, "EE dd MMM yyyy" },
558 { eeeedMyPattern
, eeeedMyText
, "eeee dd MMM yyyy" },
559 { eeeeedMyPattern
, eeeeedMyText
, "eeeee dd MMM yyyy" },
560 { ewYPattern
, ewYText
, "e ww YYYY" },
561 { cwYPattern
, ewYText
, "c ww YYYY" },
562 { HHmmssPattern
, HHmmssText
, "* HH:mm:ss" }, /* '*' at start means don't check value from parse (won't be july022008) */
563 { ssSPattern
, ssSText
, "* ss.S" },
564 { ssSSPattern
, ssSSText
, "* ss.SS" },
569 UErrorCode status
= U_ZERO_ERROR
;
570 UDateFormat
* dtfmt
= udat_open(UDAT_LONG
, UDAT_LONG
, "en", zonePST
, -1, NULL
, 0, &status
);
571 if ( U_SUCCESS(status
) ) {
572 const DatePatternAndText
*patTextPtr
;
573 for (patTextPtr
= datePatternsAndText
; patTextPtr
->pattern
!= NULL
; ++patTextPtr
) {
574 UChar dmyGnText
[DATE_TEXT_MAX_CHARS
];
575 char byteText
[3*DATE_TEXT_MAX_CHARS
];
576 int32_t dmyGnTextLen
;
579 udat_applyPattern(dtfmt
, FALSE
, patTextPtr
->pattern
, -1);
580 dmyGnTextLen
= udat_format(dtfmt
, july022008
, dmyGnText
, DATE_TEXT_MAX_CHARS
, NULL
, &status
);
581 (void)dmyGnTextLen
; /* Suppress set but not used warning. */
582 if ( U_FAILURE(status
) ) {
583 log_err("FAIL: udat_format with %s: %s\n", patTextPtr
->label
, myErrorName(status
) );
584 status
= U_ZERO_ERROR
;
585 } else if ( u_strcmp(dmyGnText
, patTextPtr
->text
) != 0 ) {
586 log_err("FAIL: udat_format with %s: wrong UChar[] result %s\n", patTextPtr
->label
, u_austrcpy(byteText
,dmyGnText
) );
589 dateResult
= udat_parse(dtfmt
, patTextPtr
->text
, -1, NULL
, &status
); /* no time, dateResult != july022008 by some hours */
590 if ( U_FAILURE(status
) ) {
591 log_err("FAIL: udat_parse with %s: %s\n", patTextPtr
->label
, myErrorName(status
) );
592 status
= U_ZERO_ERROR
;
593 } else if ( patTextPtr
->label
[0] != '*' && july022008
- dateResult
> dayMillisec
) {
594 log_err("FAIL: udat_parse with %s: wrong UDate result\n", patTextPtr
->label
);
599 log_data_err("FAIL: udat_open fails: %s (Are you missing data?)\n", myErrorName(status
));
603 /*INTERNAL FUNCTION USED */
605 UChar
* myFormatit(UDateFormat
* datdef
, UDate d1
)
608 int32_t resultlength
, resultlengthneeded
;
609 UErrorCode status
= U_ZERO_ERROR
;
612 resultlengthneeded
=udat_format(datdef
, d1
, NULL
, resultlength
, NULL
, &status
);
613 if(status
==U_BUFFER_OVERFLOW_ERROR
)
616 resultlength
=resultlengthneeded
+1;
617 /*result1=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /*this leaks*/
618 result1
=(UChar
*)ctst_malloc(sizeof(UChar
) * resultlength
); /*this won't*/
619 udat_format(datdef
, d1
, result1
, resultlength
, NULL
, &status
);
621 if(U_FAILURE(status
))
623 log_err("FAIL: Error in formatting using udat_format(.....): %s\n", myErrorName(status
));
632 #endif /* #if !UCONFIG_NO_FORMATTING */