1 /********************************************************************
3 * Copyright (c) 1997-2012, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6 /********************************************************************************
10 * Madhu Katragadda Ported for C API
11 * Modification History:
12 * Date Name Description
13 * 07/15/99 helena Ported to HPUX 10/11 CC.
14 *********************************************************************************
16 /* REGRESSION TEST FOR DATE FORMAT */
18 #include "unicode/utypes.h"
20 #if !UCONFIG_NO_FORMATTING
22 #include "unicode/uloc.h"
23 #include "unicode/udat.h"
24 #include "unicode/ucal.h"
25 #include "unicode/unum.h"
26 #include "unicode/ustring.h"
31 void addDateForRgrTest(TestNode
** root
);
33 void addDateForRgrTest(TestNode
** root
)
35 addTest(root
, &Test4029195
, "tsformat/cdtrgtst/Test4029195");
36 addTest(root
, &Test4056591
, "tsformat/cdtrgtst/Test4056591");
37 addTest(root
, &Test4059917
, "tsformat/cdtrgtst/Test4059917");
38 addTest(root
, &Test4060212
, "tsformat/cdtrgtst/Test4060212");
39 addTest(root
, &Test4061287
, "tsformat/cdtrgtst/Test4061287");
40 addTest(root
, &Test4073003
, "tsformat/cdtrgtst/Test4073003");
41 addTest(root
, &Test4162071
, "tsformat/cdtrgtst/Test4162071");
42 addTest(root
, &Test714
, "tsformat/cdtrgtst/Test714");
43 addTest(root
, &Test_GEec
, "tsformat/cdtrgtst/Test_GEec"); /* tests for format chars GEec, jitterbugs 5726 6072 6585 */
51 int32_t resultlength
, resultlengthneeded
;
52 UChar
*fmdt
, *todayS
, *rt
;
58 UErrorCode status
= U_ZERO_ERROR
;
60 log_verbose("Testing date format and parse function in regression test\n");
61 today
= ucal_getNow();
63 df
= udat_open(UDAT_DEFAULT
,UDAT_DEFAULT
,"en_US", NULL
, 0, NULL
, 0, &status
);
66 log_data_err("FAIL: error in creating the dateformat using default date and time style : %s (Are you missing data?)\n", myErrorName(status
));
70 resultlengthneeded
=udat_toPattern(df
, TRUE
, NULL
, resultlength
, &status
);
71 if(status
==U_BUFFER_OVERFLOW_ERROR
)
74 resultlength
=resultlengthneeded
+ 1;
75 pat
=(UChar
*)malloc(sizeof(UChar
) * resultlength
);
76 udat_toPattern(df
, TRUE
, pat
, resultlength
, &status
);
79 log_verbose("pattern: %s\n", austrdup(pat
));
82 fmdt
= myFormatit(df
, today
);
84 log_verbose("today: %s\n", austrdup(fmdt
));
86 log_data_err("ERROR: couldn't format, exitting test");
90 temp
=(UChar
*)malloc(sizeof(UChar
) * 10);
91 u_uastrcpy(temp
, "M yyyy dd");
92 udat_applyPattern(df
, TRUE
, temp
, u_strlen(temp
));
94 todayS
=myFormatit(df
, today
);
95 log_verbose("After teh pattern is applied\n today: %s\n", austrdup(todayS
) );
97 d1
=udat_parse(df
, todayS
, u_strlen(todayS
), &parsepos
, &status
);
100 log_err("FAIL: Error in parsing using udat_parse(.....): %s\n", myErrorName(status
));
103 rt
=myFormatit(df
, d1
);
104 log_verbose("today: %s\n", austrdup(rt
) );
106 log_verbose("round trip: %s\n", austrdup(rt
) );
108 if(u_strcmp(rt
, todayS
)!=0) {
109 log_err("Fail: Want %s Got %s\n", austrdup(todayS
), austrdup(rt
) );
112 log_verbose("Pass: parse and format working fine\n");
123 * Verify the function of the [s|g]et2DigitYearStart() API.
132 UChar
*gotdate
, *expdate
;
135 UErrorCode status
= U_ZERO_ERROR
;
136 const char* strings
[] = {
143 log_verbose("Testing s[get] 2 digit year start regressively\n");
144 cal
=ucal_open(NULL
, 0, "en_US", UCAL_GREGORIAN
, &status
);
145 if(U_FAILURE(status
)){
146 log_data_err("error in ucal_open caldef : %s - (Are you missing data?)\n", myErrorName(status
));
149 ucal_setDateTime(cal
, 1809, UCAL_DECEMBER
, 25, 17, 40, 30, &status
);
150 d
[0]=ucal_getMillis(cal
, &status
);
151 if(U_FAILURE(status
)){
152 log_err("Error: failure in get millis: %s\n", myErrorName(status
));
154 ucal_setDateTime(cal
, 1909, UCAL_DECEMBER
, 24, 17, 40, 30, &status
);
155 d
[1]=ucal_getMillis(cal
, &status
);
156 ucal_setDateTime(cal
, 1861, UCAL_DECEMBER
, 26, 17, 40, 30, &status
);
157 d
[2]=ucal_getMillis(cal
, &status
);
158 ucal_setDateTime(cal
, 1999, UCAL_DECEMBER
, 27, 17, 40, 30, &status
);
159 d
[3]=ucal_getMillis(cal
, &status
);
162 u_uastrcpy(pat
, "yyMMdd");
163 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
, NULL
, 0, pat
, u_strlen(pat
), &status
);
164 if(U_FAILURE(status
))
166 log_data_err("FAIL: error in creating the dateformat using u_openPattern(): %s - (Are you missing data?)\n", myErrorName(status
));
170 udat_set2DigitYearStart(def
, start
, &status
);
171 if(U_FAILURE(status
))
172 log_err("ERROR: in setTwoDigitStartDate: %s\n", myErrorName(status
));
173 if( (udat_get2DigitYearStart(def
, &status
) != start
))
174 log_err("ERROR: get2DigitYearStart broken\n");
177 for(i
= 0; i
< 4; ++i
) {
178 u_uastrcpy(s
, strings
[i
]);
180 got
= udat_parse(def
, s
, u_strlen(s
), 0, &status
);
181 gotdate
=myFormatit(def
, got
);
182 expdate
=myFormatit(def
, exp
);
184 if (gotdate
== NULL
|| expdate
== NULL
) {
185 log_err("myFormatit failed!\n");
187 else if(u_strcmp(gotdate
, expdate
) !=0){
188 log_err("set2DigitYearStart broken for %s \n got: %s, expected: %s\n", austrdup(s
),
189 austrdup(gotdate
), austrdup(expdate
) );
199 * SimpleDateFormat does not properly parse date strings without delimiters
206 UErrorCode status
= U_ZERO_ERROR
;
210 log_verbose("Testing apply pattern and to pattern regressively\n");
211 u_uastrcpy(tzID
, "PST");
212 u_uastrcpy(pattern
, "yyyy/MM/dd");
213 log_verbose("%s\n", austrdup(pattern
) );
214 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,tzID
,-1,pattern
, u_strlen(pattern
),&status
);
215 if(U_FAILURE(status
))
217 log_data_err("FAIL: error in creating the dateformat using openPattern: %s - (Are you missing data?)\n", myErrorName(status
));
220 myDate
=(UChar
*)malloc(sizeof(UChar
) * 11);
221 u_uastrcpy(myDate
, "1970/01/12");
223 aux917( def
, myDate
);
226 u_uastrcpy(pattern
, "yyyyMMdd");
227 def
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,tzID
,-1,pattern
, u_strlen(pattern
),&status
);
228 if(U_FAILURE(status
))
230 log_err("FAIL: error in creating the dateformat using openPattern: %s\n", myErrorName(status
));
233 u_uastrcpy(myDate
, "19700112");
234 aux917( def
, myDate
);
239 void aux917( UDateFormat
*fmt
, UChar
* str
)
241 int32_t resultlength
, resultlengthneeded
;
242 UErrorCode status
= U_ZERO_ERROR
;
243 UChar
* formatted
=NULL
;
245 UDate d1
=1000000000.0;
248 resultlengthneeded
=udat_toPattern(fmt
, TRUE
, NULL
, resultlength
, &status
);
249 if(status
==U_BUFFER_OVERFLOW_ERROR
)
252 resultlength
=resultlengthneeded
+ 1;
253 pat
=(UChar
*)malloc(sizeof(UChar
) * (resultlength
));
254 udat_toPattern(fmt
, TRUE
, pat
, resultlength
, &status
);
256 if(U_FAILURE(status
)){
257 log_err("failure in retrieving the pattern: %s\n", myErrorName(status
));
259 log_verbose("pattern: %s\n", austrdup(pat
) );
261 status
= U_ZERO_ERROR
;
262 formatted
= myFormatit(fmt
, d1
);
263 if( u_strcmp(formatted
,str
)!=0) {
264 log_err("Fail: Want %s Got: %s\n", austrdup(str
), austrdup(formatted
) );
276 UDateFormat
*formatter
, *fmt
;
277 UErrorCode status
= U_ZERO_ERROR
;
280 UChar dateString
[30], pattern
[20], tzID
[4];
281 u_uastrcpy(dateString
, "1995-040.05:01:29 -8");
282 u_uastrcpy(pattern
, "yyyy-DDD.hh:mm:ss z");
284 log_verbose( "dateString= %s Using yyyy-DDD.hh:mm:ss\n", austrdup(dateString
) );
285 status
= U_ZERO_ERROR
;
286 u_uastrcpy(tzID
, "PST");
288 formatter
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,"en_US",tzID
,-1,pattern
, u_strlen(pattern
), &status
);
290 myDate
= udat_parse(formatter
, dateString
, u_strlen(dateString
), &pos
, &status
);
293 fmt
= udat_open(UDAT_FULL
,UDAT_LONG
,NULL
, tzID
, -1, NULL
, 0, &status
);
294 if(U_FAILURE(status
))
296 log_data_err("FAIL: error in creating the dateformat using default date and time style: %s - (Are you missing data?)\n",
297 myErrorName(status
) );
300 myString
= myFormatit(fmt
, myDate
);
301 cal
=ucal_open(tzID
, u_strlen(tzID
), "en_US", UCAL_GREGORIAN
, &status
);
302 if(U_FAILURE(status
)){
303 log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status
));
305 ucal_setMillis(cal
, myDate
, &status
);
306 if ((ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
) != 40)){
307 log_err("Fail: Got %d Expected 40\n", ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
));
310 udat_close(formatter
);
324 UErrorCode status
= U_ZERO_ERROR
;
326 UChar pattern
[21], dateString
[11];
328 u_uastrcpy(dateString
, "35/13/1971");
329 u_uastrcpy(pattern
, "dd/mm/yyyy");
330 status
= U_ZERO_ERROR
;
331 log_verbose("Testing parsing by changing the attribute lenient\n");
332 df
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,NULL
,NULL
,0,pattern
, u_strlen(pattern
),&status
);
333 if(U_FAILURE(status
)){
334 log_data_err("ERROR: failure in open pattern of test4061287: %s - (Are you missing data?)\n", myErrorName(status
));
340 udat_setLenient(df
, FALSE
);
341 ok
=udat_isLenient(df
);
343 log_err("setLenient nor working\n");
345 myDate
= udat_parse(df
, dateString
, u_strlen(dateString
), &pos
, &status
);
346 if(U_FAILURE(status
))
349 log_err("Fail: Lenient not working: does lenient parsing in spite of setting Leninent as FALSE ");
357 /* The java.text.DateFormat.parse(String) method expects for the
358 US locale a string formatted according to mm/dd/yy and parses it
361 When given a string mm/dd/yyyy it only parses up to the first
362 two y's, typically resulting in a date in the year 1919.
364 Please extend the parsing method(s) to handle strings with
365 four-digit year values (probably also applicable to various
376 UErrorCode status
= U_ZERO_ERROR
;
378 UChar
*result
, *result2
;
379 const char* tests
[] = {
386 fmt
= udat_open(UDAT_SHORT
,UDAT_SHORT
,NULL
, NULL
, 0, NULL
, 0, &status
);
387 if(U_FAILURE(status
))
389 log_data_err("FAIL: error in creating the dateformat using short date and time style: %s (Are you missing data?)\n",
390 myErrorName(status
));
393 u_uastrcpy(temp
, "m/D/yy");
394 udat_applyPattern(fmt
, FALSE
, temp
, u_strlen(temp
));
396 for(i
= 0; i
< 4; i
+=2) {
398 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
])+1));
399 u_uastrcpy(datestr
, tests
[i
]);
402 d
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
403 if(U_FAILURE(status
)){
404 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
408 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
+1])+1));
409 u_uastrcpy(datestr
, tests
[i
+1]);
413 dd
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
414 if(U_FAILURE(status
)){
415 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
419 result
=myFormatit(fmt
, d
);
420 result2
=myFormatit(fmt
, dd
);
421 if(!result
|| !result2
) {
422 log_data_err("Fail: could not format - exitting test\n");
425 if (u_strcmp(result
, result2
)!=0){
426 log_err("Fail: %s != %s\n", austrdup(result
), austrdup(result2
) );
429 log_verbose("Ok: %s == %s\n", austrdup(result
), austrdup(result2
) );
443 UErrorCode status
= U_ZERO_ERROR
;
447 u_uastrcpy(datestr
, "Thu, 30-Jul-1999 11:51:14 GMT");
448 u_uastrcpy(format
, "EEE', 'dd-MMM-yyyy HH:mm:ss z"); /* RFC 822/1123 */
449 status
= U_ZERO_ERROR
;
450 /* Can't hardcode the result to assume the default locale is "en_US". */
451 df
= udat_open(UDAT_PATTERN
,UDAT_PATTERN
,"en_US",NULL
,0,format
, u_strlen(format
),&status
);
452 if(U_FAILURE(status
)){
453 log_data_err("ERROR: couldn't create date format: %s\n", myErrorName(status
));
457 x
= udat_parse(df
, datestr
, u_strlen(datestr
), &pos
, &status
);
458 if(U_FAILURE(status
)){
459 log_data_err("ERROR : parse format %s fails : %s\n", austrdup(format
), myErrorName(status
));
462 log_verbose("Parse format \"%s \" ok.\n", austrdup(format
) );
464 /*log_verbose("date= %s\n", austrdup(myFormatit(df, x)) );*/
470 UDate d
=978103543000.0;
472 UErrorCode status
= U_ZERO_ERROR
;
475 const char* expect
= "7:25:43 AM";
477 ctest_setTimeZone(NULL
, &status
);
479 fmt
= udat_open(UDAT_MEDIUM
,UDAT_NONE
,"en_US_CA", NULL
, -1, NULL
, 0, &status
);
480 if(U_FAILURE(status
))
482 log_data_err("FAIL: error in creating the dateformat using medium time style and NO date style: %s (Are you missing data?)\n",
483 myErrorName(status
));
486 result
=myFormatit(fmt
, d
);
488 log_data_err("Fail: could not format - exitting test\n");
491 u_uastrcpy(temp
, expect
);
492 if (u_strcmp(result
, temp
)!=0){
493 log_err("Fail: %s != %s\n", austrdup(result
), expect
);
496 log_verbose("Ok: %s == %s\n", austrdup(result
), expect
);
501 ctest_resetTimeZone();
504 enum { DATE_TEXT_MAX_CHARS
= 64 };
505 static const UChar zonePST
[] = { 0x50,0x53,0x54,0 }; /* "PST" */
506 static const UDate july022008
= 1215000001979.0; /* 02 July 2008 5:00:01.979 AM PDT (near ICU 4.0 release date :-) */
507 static const double dayMillisec
= 8.64e+07;
509 static const UChar dMyGGGPattern
[] = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0 }; /* "dd MMM yyyy GGG" */
510 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" */
511 static const UChar dMyGGGText
[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0x44,0 }; /* "02 Jul 2008 AD" */
512 static const UChar dMyGGGGGText
[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0 }; /* "02 Jul 2008 A" */
513 static const UChar edMyPattern
[] = { 0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "e dd MMM yyyy" */
514 static const UChar eedMyPattern
[] = { 0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "ee dd MMM yyyy" */
515 static const UChar cdMyPattern
[] = { 0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "c dd MMM yyyy" */
516 static const UChar ccdMyPattern
[] = { 0x63,0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "cc dd MMM yyyy" */
517 static const UChar edMyText
[] = { 0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "4 02 Jul 2008" */
518 static const UChar eedMyText
[] = { 0x30,0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "04 02 Jul 2008" */
519 static const UChar eeedMyPattern
[] = { 0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eee dd MMM yyyy" */
520 static const UChar EEEdMyPattern
[] = { 0x45,0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EEE dd MMM yyyy" */
521 static const UChar EEdMyPattern
[] = { 0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EE dd MMM yyyy" */
522 static const UChar eeedMyText
[] = { 0x57,0x65,0x64,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "Wed 02 Jul 2008" */
523 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" */
524 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" */
525 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" */
526 static const UChar eeeeedMyText
[] = { 0x57,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "W 02 Jul 2008" */
527 static const UChar ewYPattern
[] = { 0x65,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 }; /* "e ww YYYY" */
528 static const UChar cwYPattern
[] = { 0x63,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 }; /* "c ww YYYY" */
529 static const UChar ewYText
[] = { 0x34,0x20,0x32,0x37,0x20,0x32,0x30,0x30,0x38,0 }; /* "4 27 2008" */
530 static const UChar HHmmssPattern
[] = { 0x48,0x48,0x3A,0x6D,0x6D,0x3A,0x73,0x73,0 }; /* "HH:mm:ss" */
531 static const UChar HHmmssText
[] = { 0x30,0x35,0x3A,0x30,0x30,0x3A,0x30,0x31,0 }; /* "05:00:01" */
532 static const UChar ssSPattern
[] = { 0x73,0x73,0x2E,0x53,0 }; /* "ss.S" */
533 static const UChar ssSText
[] = { 0x30,0x31,0x2E,0x39,0 }; /* "01.9" */
534 static const UChar ssSSPattern
[] = { 0x73,0x73,0x2E,0x53,0x53,0 }; /* "ss.SS" */
535 static const UChar ssSSText
[] = { 0x30,0x31,0x2E,0x39,0x37,0 }; /* "01.97" */
538 const UChar
* pattern
;
541 } DatePatternAndText
;
542 static const DatePatternAndText datePatternsAndText
[] = {
543 { dMyGGGPattern
, dMyGGGText
, "dd MMM yyyy GGG" },
544 { dMyGGGGGPattern
, dMyGGGGGText
, "dd MMM yyyy GGGGG" },
545 { edMyPattern
, edMyText
, "e dd MMM yyyy" },
546 { eedMyPattern
, eedMyText
, "ee dd MMM yyyy" },
547 { cdMyPattern
, edMyText
, "c dd MMM yyyy" },
548 { ccdMyPattern
, edMyText
, "cc dd MMM yyyy" },
549 { eeedMyPattern
, eeedMyText
, "eee dd MMM yyyy" },
550 { EEEdMyPattern
, eeedMyText
, "EEE dd MMM yyyy" },
551 { EEdMyPattern
, eeedMyText
, "EE dd MMM yyyy" },
552 { eeeedMyPattern
, eeeedMyText
, "eeee dd MMM yyyy" },
553 { eeeeedMyPattern
, eeeeedMyText
, "eeeee dd MMM yyyy" },
554 { ewYPattern
, ewYText
, "e ww YYYY" },
555 { cwYPattern
, ewYText
, "c ww YYYY" },
556 { HHmmssPattern
, HHmmssText
, "* HH:mm:ss" }, /* '*' at start means don't check value from parse (won't be july022008) */
557 { ssSPattern
, ssSText
, "* ss.S" },
558 { ssSSPattern
, ssSSText
, "* ss.SS" },
563 UErrorCode status
= U_ZERO_ERROR
;
564 UDateFormat
* dtfmt
= udat_open(UDAT_LONG
, UDAT_LONG
, "en", zonePST
, -1, NULL
, 0, &status
);
565 if ( U_SUCCESS(status
) ) {
566 const DatePatternAndText
*patTextPtr
;
567 for (patTextPtr
= datePatternsAndText
; patTextPtr
->pattern
!= NULL
; ++patTextPtr
) {
568 UChar dmyGnText
[DATE_TEXT_MAX_CHARS
];
569 char byteText
[3*DATE_TEXT_MAX_CHARS
];
570 int32_t dmyGnTextLen
;
573 udat_applyPattern(dtfmt
, FALSE
, patTextPtr
->pattern
, -1);
574 dmyGnTextLen
= udat_format(dtfmt
, july022008
, dmyGnText
, DATE_TEXT_MAX_CHARS
, NULL
, &status
);
575 if ( U_FAILURE(status
) ) {
576 log_err("FAIL: udat_format with %s: %s\n", patTextPtr
->label
, myErrorName(status
) );
577 status
= U_ZERO_ERROR
;
578 } else if ( u_strcmp(dmyGnText
, patTextPtr
->text
) != 0 ) {
579 log_err("FAIL: udat_format with %s: wrong UChar[] result %s\n", patTextPtr
->label
, u_austrcpy(byteText
,dmyGnText
) );
582 dateResult
= udat_parse(dtfmt
, patTextPtr
->text
, -1, NULL
, &status
); /* no time, dateResult != july022008 by some hours */
583 if ( U_FAILURE(status
) ) {
584 log_err("FAIL: udat_parse with %s: %s\n", patTextPtr
->label
, myErrorName(status
) );
585 status
= U_ZERO_ERROR
;
586 } else if ( patTextPtr
->label
[0] != '*' && july022008
- dateResult
> dayMillisec
) {
587 log_err("FAIL: udat_parse with %s: wrong UDate result\n", patTextPtr
->label
);
592 log_data_err("FAIL: udat_open fails: %s (Are you missing data?)\n", myErrorName(status
));
596 /*INTERNAL FUNCTION USED */
598 UChar
* myFormatit(UDateFormat
* datdef
, UDate d1
)
601 int32_t resultlength
, resultlengthneeded
;
602 UErrorCode status
= U_ZERO_ERROR
;
605 resultlengthneeded
=udat_format(datdef
, d1
, NULL
, resultlength
, NULL
, &status
);
606 if(status
==U_BUFFER_OVERFLOW_ERROR
)
609 resultlength
=resultlengthneeded
+1;
610 /*result1=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /*this leaks*/
611 result1
=(UChar
*)ctst_malloc(sizeof(UChar
) * resultlength
); /*this won't*/
612 udat_format(datdef
, d1
, result1
, resultlength
, NULL
, &status
);
614 if(U_FAILURE(status
))
616 log_err("FAIL: Error in formatting using udat_format(.....): %s\n", myErrorName(status
));
625 #endif /* #if !UCONFIG_NO_FORMATTING */