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
));
172 udat_set2DigitYearStart(def
, start
, &status
);
173 if(U_FAILURE(status
))
174 log_err("ERROR: in setTwoDigitStartDate: %s\n", myErrorName(status
));
175 if( (udat_get2DigitYearStart(def
, &status
) != start
))
176 log_err("ERROR: get2DigitYearStart broken\n");
179 for(i
= 0; i
< 4; ++i
) {
180 u_uastrcpy(s
, strings
[i
]);
182 got
= udat_parse(def
, s
, u_strlen(s
), 0, &status
);
183 gotdate
=myFormatit(def
, got
);
184 expdate
=myFormatit(def
, exp
);
186 if (gotdate
== NULL
|| expdate
== NULL
) {
187 log_err("myFormatit failed!\n");
189 else if(u_strcmp(gotdate
, expdate
) !=0){
190 log_err("set2DigitYearStart broken for %s \n got: %s, expected: %s\n", austrdup(s
),
191 austrdup(gotdate
), austrdup(expdate
) );
201 * SimpleDateFormat does not properly parse date strings without delimiters
208 UErrorCode status
= U_ZERO_ERROR
;
212 log_verbose("Testing apply pattern and to pattern regressively\n");
213 u_uastrcpy(tzID
, "PST");
214 u_uastrcpy(pattern
, "yyyy/MM/dd");
215 log_verbose("%s\n", austrdup(pattern
) );
216 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,tzID
,-1,pattern
, u_strlen(pattern
),&status
);
217 if(U_FAILURE(status
))
219 log_data_err("FAIL: error in creating the dateformat using openPattern: %s - (Are you missing data?)\n", myErrorName(status
));
222 myDate
=(UChar
*)malloc(sizeof(UChar
) * 11);
223 u_uastrcpy(myDate
, "1970/01/12");
225 aux917( def
, myDate
);
228 u_uastrcpy(pattern
, "yyyyMMdd");
229 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,tzID
,-1,pattern
, u_strlen(pattern
),&status
);
230 if(U_FAILURE(status
))
232 log_err("FAIL: error in creating the dateformat using openPattern: %s\n", myErrorName(status
));
235 u_uastrcpy(myDate
, "19700112");
236 aux917( def
, myDate
);
241 void aux917( UDateFormat
*fmt
, UChar
* str
)
243 int32_t resultlength
, resultlengthneeded
;
244 UErrorCode status
= U_ZERO_ERROR
;
245 UChar
* formatted
=NULL
;
247 UDate d1
=1000000000.0;
250 resultlengthneeded
=udat_toPattern(fmt
, TRUE
, NULL
, resultlength
, &status
);
251 if(status
==U_BUFFER_OVERFLOW_ERROR
)
254 resultlength
=resultlengthneeded
+ 1;
255 pat
=(UChar
*)malloc(sizeof(UChar
) * (resultlength
));
256 udat_toPattern(fmt
, TRUE
, pat
, resultlength
, &status
);
258 if(U_FAILURE(status
)){
259 log_err("failure in retrieving the pattern: %s\n", myErrorName(status
));
261 log_verbose("pattern: %s\n", austrdup(pat
) );
263 status
= U_ZERO_ERROR
;
264 formatted
= myFormatit(fmt
, d1
);
265 if( u_strcmp(formatted
,str
)!=0) {
266 log_err("Fail: Want %s Got: %s\n", austrdup(str
), austrdup(formatted
) );
278 UDateFormat
*formatter
, *fmt
;
279 UErrorCode status
= U_ZERO_ERROR
;
282 UChar dateString
[30], pattern
[20], tzID
[4];
283 u_uastrcpy(dateString
, "1995-040.05:01:29 -8");
284 u_uastrcpy(pattern
, "yyyy-DDD.hh:mm:ss z");
286 log_verbose( "dateString= %s Using yyyy-DDD.hh:mm:ss\n", austrdup(dateString
) );
287 status
= U_ZERO_ERROR
;
288 u_uastrcpy(tzID
, "PST");
290 formatter
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,"en_US",tzID
,-1,pattern
, u_strlen(pattern
), &status
);
292 myDate
= udat_parse(formatter
, dateString
, u_strlen(dateString
), &pos
, &status
);
295 fmt
= udat_open(UDAT_FULL
,UDAT_LONG
,NULL
, tzID
, -1, NULL
, 0, &status
);
296 if(U_FAILURE(status
))
298 log_data_err("FAIL: error in creating the dateformat using default date and time style: %s - (Are you missing data?)\n",
299 myErrorName(status
) );
302 myString
= myFormatit(fmt
, myDate
);
303 (void)myString
; /* Suppress set but not used warning. */
304 cal
=ucal_open(tzID
, u_strlen(tzID
), "en_US", UCAL_GREGORIAN
, &status
);
305 if(U_FAILURE(status
)){
306 log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status
));
308 ucal_setMillis(cal
, myDate
, &status
);
309 if ((ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
) != 40)){
310 log_err("Fail: Got %d Expected 40\n", ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
));
313 udat_close(formatter
);
327 UErrorCode status
= U_ZERO_ERROR
;
329 UChar pattern
[21], dateString
[11];
331 u_uastrcpy(dateString
, "35/13/1971");
332 u_uastrcpy(pattern
, "dd/mm/yyyy");
333 status
= U_ZERO_ERROR
;
334 log_verbose("Testing parsing by changing the attribute lenient\n");
335 df
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,NULL
,0,pattern
, u_strlen(pattern
),&status
);
336 if(U_FAILURE(status
)){
337 log_data_err("ERROR: failure in open pattern of test4061287: %s - (Are you missing data?)\n", myErrorName(status
));
343 udat_setLenient(df
, FALSE
);
344 ok
=udat_isLenient(df
);
346 log_err("setLenient nor working\n");
348 myDate
= udat_parse(df
, dateString
, u_strlen(dateString
), &pos
, &status
);
349 (void)myDate
; /* Suppress set but not used warning. */
350 if(U_FAILURE(status
))
353 log_err("Fail: Lenient not working: does lenient parsing in spite of setting Leninent as FALSE ");
361 /* The java.text.DateFormat.parse(String) method expects for the
362 US locale a string formatted according to mm/dd/yy and parses it
365 When given a string mm/dd/yyyy it only parses up to the first
366 two y's, typically resulting in a date in the year 1919.
368 Please extend the parsing method(s) to handle strings with
369 four-digit year values (probably also applicable to various
380 UErrorCode status
= U_ZERO_ERROR
;
382 UChar
*result
, *result2
;
383 const char* tests
[] = {
390 fmt
= udat_open(UDAT_SHORT
,UDAT_SHORT
,NULL
, NULL
, 0, NULL
, 0, &status
);
391 if(U_FAILURE(status
))
393 log_data_err("FAIL: error in creating the dateformat using short date and time style: %s (Are you missing data?)\n",
394 myErrorName(status
));
397 u_uastrcpy(temp
, "m/D/yy");
398 udat_applyPattern(fmt
, FALSE
, temp
, u_strlen(temp
));
400 for(i
= 0; i
< 4; i
+=2) {
402 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
])+1));
403 u_uastrcpy(datestr
, tests
[i
]);
406 d
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
407 if(U_FAILURE(status
)){
408 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
412 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
+1])+1));
413 u_uastrcpy(datestr
, tests
[i
+1]);
417 dd
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
418 if(U_FAILURE(status
)){
419 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
423 result
=myFormatit(fmt
, d
);
424 result2
=myFormatit(fmt
, dd
);
425 if(!result
|| !result2
) {
426 log_data_err("Fail: could not format - exitting test\n");
429 if (u_strcmp(result
, result2
)!=0){
430 log_err("Fail: %s != %s\n", austrdup(result
), austrdup(result2
) );
433 log_verbose("Ok: %s == %s\n", austrdup(result
), austrdup(result2
) );
447 UErrorCode status
= U_ZERO_ERROR
;
451 u_uastrcpy(datestr
, "Thu, 30-Jul-1999 11:51:14 GMT");
452 u_uastrcpy(format
, "EEE', 'dd-MMM-yyyy HH:mm:ss z"); /* RFC 822/1123 */
453 status
= U_ZERO_ERROR
;
454 /* Can't hardcode the result to assume the default locale is "en_US". */
455 df
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,"en_US",NULL
,0,format
, u_strlen(format
),&status
);
456 if(U_FAILURE(status
)){
457 log_data_err("ERROR: couldn't create date format: %s\n", myErrorName(status
));
461 x
= udat_parse(df
, datestr
, u_strlen(datestr
), &pos
, &status
);
462 (void)x
; /* Suppress set but not used warning. */
463 if(U_FAILURE(status
)){
464 log_data_err("ERROR : parse format %s fails : %s\n", austrdup(format
), myErrorName(status
));
467 log_verbose("Parse format \"%s \" ok.\n", austrdup(format
) );
469 /*log_verbose("date= %s\n", austrdup(myFormatit(df, x)) );*/
475 UDate d
=978103543000.0;
477 UErrorCode status
= U_ZERO_ERROR
;
480 const char* expect
= "7:25:43 AM";
482 ctest_setTimeZone(NULL
, &status
);
484 fmt
= udat_open(UDAT_MEDIUM
,UDAT_NONE
,"en_US_CA", NULL
, -1, NULL
, 0, &status
);
485 if(U_FAILURE(status
))
487 log_data_err("FAIL: error in creating the dateformat using medium time style and NO date style: %s (Are you missing data?)\n",
488 myErrorName(status
));
491 result
=myFormatit(fmt
, d
);
493 log_data_err("Fail: could not format - exitting test\n");
496 u_uastrcpy(temp
, expect
);
497 if (u_strcmp(result
, temp
)!=0){
498 log_err("Fail: %s != %s\n", austrdup(result
), expect
);
501 log_verbose("Ok: %s == %s\n", austrdup(result
), expect
);
506 ctest_resetTimeZone();
509 enum { DATE_TEXT_MAX_CHARS
= 64 };
510 static const UChar zonePST
[] = { 0x50,0x53,0x54,0 }; /* "PST" */
511 static const UDate july022008
= 1215000001979.0; /* 02 July 2008 5:00:01.979 AM PDT (near ICU 4.0 release date :-) */
512 static const double dayMillisec
= 8.64e+07;
514 static const UChar dMyGGGPattern
[] = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0 }; /* "dd MMM yyyy GGG" */
515 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" */
516 static const UChar dMyGGGText
[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0x44,0 }; /* "02 Jul 2008 AD" */
517 static const UChar dMyGGGGGText
[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0 }; /* "02 Jul 2008 A" */
518 static const UChar edMyPattern
[] = { 0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "e dd MMM yyyy" */
519 static const UChar eedMyPattern
[] = { 0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "ee dd MMM yyyy" */
520 static const UChar cdMyPattern
[] = { 0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "c dd MMM yyyy" */
521 static const UChar ccdMyPattern
[] = { 0x63,0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "cc dd MMM yyyy" */
522 static const UChar edMyText
[] = { 0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "4 02 Jul 2008" */
523 static const UChar eedMyText
[] = { 0x30,0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "04 02 Jul 2008" */
524 static const UChar eeedMyPattern
[] = { 0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eee dd MMM yyyy" */
525 static const UChar EEEdMyPattern
[] = { 0x45,0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EEE dd MMM yyyy" */
526 static const UChar EEdMyPattern
[] = { 0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EE dd MMM yyyy" */
527 static const UChar eeedMyText
[] = { 0x57,0x65,0x64,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "Wed 02 Jul 2008" */
528 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" */
529 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" */
530 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" */
531 static const UChar eeeeedMyText
[] = { 0x57,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "W 02 Jul 2008" */
532 static const UChar ewYPattern
[] = { 0x65,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 }; /* "e ww YYYY" */
533 static const UChar cwYPattern
[] = { 0x63,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 }; /* "c ww YYYY" */
534 static const UChar ewYText
[] = { 0x34,0x20,0x32,0x37,0x20,0x32,0x30,0x30,0x38,0 }; /* "4 27 2008" */
535 static const UChar HHmmssPattern
[] = { 0x48,0x48,0x3A,0x6D,0x6D,0x3A,0x73,0x73,0 }; /* "HH:mm:ss" */
536 static const UChar HHmmssText
[] = { 0x30,0x35,0x3A,0x30,0x30,0x3A,0x30,0x31,0 }; /* "05:00:01" */
537 static const UChar ssSPattern
[] = { 0x73,0x73,0x2E,0x53,0 }; /* "ss.S" */
538 static const UChar ssSText
[] = { 0x30,0x31,0x2E,0x39,0 }; /* "01.9" */
539 static const UChar ssSSPattern
[] = { 0x73,0x73,0x2E,0x53,0x53,0 }; /* "ss.SS" */
540 static const UChar ssSSText
[] = { 0x30,0x31,0x2E,0x39,0x37,0 }; /* "01.97" */
543 const UChar
* pattern
;
546 } DatePatternAndText
;
547 static const DatePatternAndText datePatternsAndText
[] = {
548 { dMyGGGPattern
, dMyGGGText
, "dd MMM yyyy GGG" },
549 { dMyGGGGGPattern
, dMyGGGGGText
, "dd MMM yyyy GGGGG" },
550 { edMyPattern
, edMyText
, "e dd MMM yyyy" },
551 { eedMyPattern
, eedMyText
, "ee dd MMM yyyy" },
552 { cdMyPattern
, edMyText
, "c dd MMM yyyy" },
553 { ccdMyPattern
, edMyText
, "cc dd MMM yyyy" },
554 { eeedMyPattern
, eeedMyText
, "eee dd MMM yyyy" },
555 { EEEdMyPattern
, eeedMyText
, "EEE dd MMM yyyy" },
556 { EEdMyPattern
, eeedMyText
, "EE dd MMM yyyy" },
557 { eeeedMyPattern
, eeeedMyText
, "eeee dd MMM yyyy" },
558 { eeeeedMyPattern
, eeeeedMyText
, "eeeee dd MMM yyyy" },
559 { ewYPattern
, ewYText
, "e ww YYYY" },
560 { cwYPattern
, ewYText
, "c ww YYYY" },
561 { HHmmssPattern
, HHmmssText
, "* HH:mm:ss" }, /* '*' at start means don't check value from parse (won't be july022008) */
562 { ssSPattern
, ssSText
, "* ss.S" },
563 { ssSSPattern
, ssSSText
, "* ss.SS" },
568 UErrorCode status
= U_ZERO_ERROR
;
569 UDateFormat
* dtfmt
= udat_open(UDAT_LONG
, UDAT_LONG
, "en", zonePST
, -1, NULL
, 0, &status
);
570 if ( U_SUCCESS(status
) ) {
571 const DatePatternAndText
*patTextPtr
;
572 for (patTextPtr
= datePatternsAndText
; patTextPtr
->pattern
!= NULL
; ++patTextPtr
) {
573 UChar dmyGnText
[DATE_TEXT_MAX_CHARS
];
574 char byteText
[3*DATE_TEXT_MAX_CHARS
];
575 int32_t dmyGnTextLen
;
578 udat_applyPattern(dtfmt
, FALSE
, patTextPtr
->pattern
, -1);
579 dmyGnTextLen
= udat_format(dtfmt
, july022008
, dmyGnText
, DATE_TEXT_MAX_CHARS
, NULL
, &status
);
580 (void)dmyGnTextLen
; /* Suppress set but not used warning. */
581 if ( U_FAILURE(status
) ) {
582 log_err("FAIL: udat_format with %s: %s\n", patTextPtr
->label
, myErrorName(status
) );
583 status
= U_ZERO_ERROR
;
584 } else if ( u_strcmp(dmyGnText
, patTextPtr
->text
) != 0 ) {
585 log_err("FAIL: udat_format with %s: wrong UChar[] result %s\n", patTextPtr
->label
, u_austrcpy(byteText
,dmyGnText
) );
588 dateResult
= udat_parse(dtfmt
, patTextPtr
->text
, -1, NULL
, &status
); /* no time, dateResult != july022008 by some hours */
589 if ( U_FAILURE(status
) ) {
590 log_err("FAIL: udat_parse with %s: %s\n", patTextPtr
->label
, myErrorName(status
) );
591 status
= U_ZERO_ERROR
;
592 } else if ( patTextPtr
->label
[0] != '*' && july022008
- dateResult
> dayMillisec
) {
593 log_err("FAIL: udat_parse with %s: wrong UDate result\n", patTextPtr
->label
);
598 log_data_err("FAIL: udat_open fails: %s (Are you missing data?)\n", myErrorName(status
));
602 /*INTERNAL FUNCTION USED */
604 UChar
* myFormatit(UDateFormat
* datdef
, UDate d1
)
607 int32_t resultlength
, resultlengthneeded
;
608 UErrorCode status
= U_ZERO_ERROR
;
611 resultlengthneeded
=udat_format(datdef
, d1
, NULL
, resultlength
, NULL
, &status
);
612 if(status
==U_BUFFER_OVERFLOW_ERROR
)
615 resultlength
=resultlengthneeded
+1;
616 /*result1=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /*this leaks*/
617 result1
=(UChar
*)ctst_malloc(sizeof(UChar
) * resultlength
); /*this won't*/
618 udat_format(datdef
, d1
, result1
, resultlength
, NULL
, &status
);
620 if(U_FAILURE(status
))
622 log_err("FAIL: Error in formatting using udat_format(.....): %s\n", myErrorName(status
));
631 #endif /* #if !UCONFIG_NO_FORMATTING */