OLD | NEW |
1 /* | 1 /* |
2 ******************************************************************************* | 2 ******************************************************************************* |
3 * Copyright (C) 2007-2013, International Business Machines Corporation and | 3 * Copyright (C) 2007-2014, International Business Machines Corporation and |
4 * others. All Rights Reserved. | 4 * others. All Rights Reserved. |
5 ******************************************************************************* | 5 ******************************************************************************* |
6 */ | 6 */ |
7 | 7 |
8 #include "unicode/utypes.h" | 8 #include "unicode/utypes.h" |
9 | 9 |
10 #if !UCONFIG_NO_FORMATTING | 10 #if !UCONFIG_NO_FORMATTING |
11 | 11 |
12 #include <stdlib.h> | 12 #include <stdlib.h> |
13 | 13 |
14 #include "reldtfmt.h" | 14 #include "reldtfmt.h" |
15 #include "unicode/datefmt.h" | 15 #include "unicode/datefmt.h" |
16 #include "unicode/smpdtfmt.h" | 16 #include "unicode/smpdtfmt.h" |
17 #include "unicode/msgfmt.h" | 17 #include "unicode/msgfmt.h" |
| 18 #include "unicode/udisplaycontext.h" |
| 19 #include "unicode/uchar.h" |
| 20 #include "unicode/brkiter.h" |
18 | 21 |
19 #include "gregoimp.h" // for CalendarData | 22 #include "gregoimp.h" // for CalendarData |
20 #include "cmemory.h" | 23 #include "cmemory.h" |
21 #include "uresimp.h" | 24 #include "uresimp.h" |
22 | 25 |
23 U_NAMESPACE_BEGIN | 26 U_NAMESPACE_BEGIN |
24 | 27 |
25 | 28 |
26 /** | 29 /** |
27 * An array of URelativeString structs is used to store the resource data loaded
out of the bundle. | 30 * An array of URelativeString structs is used to store the resource data loaded
out of the bundle. |
28 */ | 31 */ |
29 struct URelativeString { | 32 struct URelativeString { |
30 int32_t offset; /** offset of this item, such as, the relative date
**/ | 33 int32_t offset; /** offset of this item, such as, the relative date
**/ |
31 int32_t len; /** length of the string **/ | 34 int32_t len; /** length of the string **/ |
32 const UChar* string; /** string, or NULL if not set **/ | 35 const UChar* string; /** string, or NULL if not set **/ |
33 }; | 36 }; |
34 | 37 |
35 static const char DT_DateTimePatternsTag[]="DateTimePatterns"; | 38 static const char DT_DateTimePatternsTag[]="DateTimePatterns"; |
36 | 39 |
37 | 40 |
38 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RelativeDateFormat) | 41 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RelativeDateFormat) |
39 | 42 |
40 RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : | 43 RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : |
41 DateFormat(other), fDateTimeFormatter(NULL), fDatePattern(other.fDatePattern), | 44 DateFormat(other), fDateTimeFormatter(NULL), fDatePattern(other.fDatePattern), |
42 fTimePattern(other.fTimePattern), fCombinedFormat(NULL), | 45 fTimePattern(other.fTimePattern), fCombinedFormat(NULL), |
43 fDateStyle(other.fDateStyle), fLocale(other.fLocale), | 46 fDateStyle(other.fDateStyle), fLocale(other.fLocale), |
44 fDayMin(other.fDayMin), fDayMax(other.fDayMax), | 47 fDayMin(other.fDayMin), fDayMax(other.fDayMax), |
45 fDatesLen(other.fDatesLen), fDates(NULL) | 48 fDatesLen(other.fDatesLen), fDates(NULL), |
| 49 fCombinedHasDateAtStart(other.fCombinedHasDateAtStart), |
| 50 fCapitalizationInfoSet(other.fCapitalizationInfoSet), |
| 51 fCapitalizationOfRelativeUnitsForUIListMenu(other.fCapitalizationOfRelativeUnit
sForUIListMenu), |
| 52 fCapitalizationOfRelativeUnitsForStandAlone(other.fCapitalizationOfRelativeUnit
sForStandAlone), |
| 53 fCapitalizationBrkIter(NULL) |
46 { | 54 { |
47 if(other.fDateTimeFormatter != NULL) { | 55 if(other.fDateTimeFormatter != NULL) { |
48 fDateTimeFormatter = (SimpleDateFormat*)other.fDateTimeFormatter->clone(
); | 56 fDateTimeFormatter = (SimpleDateFormat*)other.fDateTimeFormatter->clone(
); |
49 } | 57 } |
50 if(other.fCombinedFormat != NULL) { | 58 if(other.fCombinedFormat != NULL) { |
51 fCombinedFormat = (MessageFormat*)other.fCombinedFormat->clone(); | 59 fCombinedFormat = (MessageFormat*)other.fCombinedFormat->clone(); |
52 } | 60 } |
53 if (fDatesLen > 0) { | 61 if (fDatesLen > 0) { |
54 fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); | 62 fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); |
55 uprv_memcpy(fDates, other.fDates, sizeof(fDates[0])*fDatesLen); | 63 uprv_memcpy(fDates, other.fDates, sizeof(fDates[0])*fDatesLen); |
56 } | 64 } |
| 65 #if !UCONFIG_NO_BREAK_ITERATION |
| 66 if (other.fCapitalizationBrkIter != NULL) { |
| 67 fCapitalizationBrkIter = (other.fCapitalizationBrkIter)->clone(); |
| 68 } |
| 69 #endif |
57 } | 70 } |
58 | 71 |
59 RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatS
tyle dateStyle, | 72 RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatS
tyle dateStyle, |
60 const Locale& locale, UErrorCode& status
) : | 73 const Locale& locale, UErrorCode& status
) : |
61 DateFormat(), fDateTimeFormatter(NULL), fDatePattern(), fTimePattern(), fCombin
edFormat(NULL), | 74 DateFormat(), fDateTimeFormatter(NULL), fDatePattern(), fTimePattern(), fCombin
edFormat(NULL), |
62 fDateStyle(dateStyle), fLocale(locale), fDatesLen(0), fDates(NULL) | 75 fDateStyle(dateStyle), fLocale(locale), fDayMin(0), fDayMax(0), fDatesLen(0), f
Dates(NULL), |
| 76 fCombinedHasDateAtStart(FALSE), fCapitalizationInfoSet(FALSE), |
| 77 fCapitalizationOfRelativeUnitsForUIListMenu(FALSE), fCapitalizationOfRelativeUn
itsForStandAlone(FALSE), |
| 78 fCapitalizationBrkIter(NULL) |
63 { | 79 { |
64 if(U_FAILURE(status) ) { | 80 if(U_FAILURE(status) ) { |
65 return; | 81 return; |
66 } | 82 } |
67 | 83 |
68 if (timeStyle < UDAT_NONE || timeStyle > UDAT_SHORT) { | 84 if (timeStyle < UDAT_NONE || timeStyle > UDAT_SHORT) { |
69 // don't support other time styles (e.g. relative styles), for now | 85 // don't support other time styles (e.g. relative styles), for now |
70 status = U_ILLEGAL_ARGUMENT_ERROR; | 86 status = U_ILLEGAL_ARGUMENT_ERROR; |
71 return; | 87 return; |
72 } | 88 } |
(...skipping 30 matching lines...) Expand all Loading... |
103 | 119 |
104 // Initialize the parent fCalendar, so that parse() works correctly. | 120 // Initialize the parent fCalendar, so that parse() works correctly. |
105 initializeCalendar(NULL, locale, status); | 121 initializeCalendar(NULL, locale, status); |
106 loadDates(status); | 122 loadDates(status); |
107 } | 123 } |
108 | 124 |
109 RelativeDateFormat::~RelativeDateFormat() { | 125 RelativeDateFormat::~RelativeDateFormat() { |
110 delete fDateTimeFormatter; | 126 delete fDateTimeFormatter; |
111 delete fCombinedFormat; | 127 delete fCombinedFormat; |
112 uprv_free(fDates); | 128 uprv_free(fDates); |
| 129 #if !UCONFIG_NO_BREAK_ITERATION |
| 130 delete fCapitalizationBrkIter; |
| 131 #endif |
113 } | 132 } |
114 | 133 |
115 | 134 |
116 Format* RelativeDateFormat::clone(void) const { | 135 Format* RelativeDateFormat::clone(void) const { |
117 return new RelativeDateFormat(*this); | 136 return new RelativeDateFormat(*this); |
118 } | 137 } |
119 | 138 |
120 UBool RelativeDateFormat::operator==(const Format& other) const { | 139 UBool RelativeDateFormat::operator==(const Format& other) const { |
121 if(DateFormat::operator==(other)) { | 140 if(DateFormat::operator==(other)) { |
| 141 // The DateFormat::operator== check for fCapitalizationContext equality
above |
| 142 // is sufficient to check equality of all derived context-related data
. |
122 // DateFormat::operator== guarantees following cast is safe | 143 // DateFormat::operator== guarantees following cast is safe |
123 RelativeDateFormat* that = (RelativeDateFormat*)&other; | 144 RelativeDateFormat* that = (RelativeDateFormat*)&other; |
124 return (fDateStyle==that->fDateStyle && | 145 return (fDateStyle==that->fDateStyle && |
125 fDatePattern==that->fDatePattern && | 146 fDatePattern==that->fDatePattern && |
126 fTimePattern==that->fTimePattern && | 147 fTimePattern==that->fTimePattern && |
127 fLocale==that->fLocale); | 148 fLocale==that->fLocale ); |
128 } | 149 } |
129 return FALSE; | 150 return FALSE; |
130 } | 151 } |
131 | 152 |
132 static const UChar APOSTROPHE = (UChar)0x0027; | 153 static const UChar APOSTROPHE = (UChar)0x0027; |
133 | 154 |
134 UnicodeString& RelativeDateFormat::format( Calendar& cal, | 155 UnicodeString& RelativeDateFormat::format( Calendar& cal, |
135 UnicodeString& appendTo, | 156 UnicodeString& appendTo, |
136 FieldPosition& pos) const { | 157 FieldPosition& pos) const { |
137 | 158 |
138 UErrorCode status = U_ZERO_ERROR; | 159 UErrorCode status = U_ZERO_ERROR; |
139 UnicodeString relativeDayString; | 160 UnicodeString relativeDayString; |
| 161 UDisplayContext capitalizationContext = getContext(UDISPCTX_TYPE_CAPITALIZAT
ION, status); |
140 | 162 |
141 // calculate the difference, in days, between 'cal' and now. | 163 // calculate the difference, in days, between 'cal' and now. |
142 int dayDiff = dayDifference(cal, status); | 164 int dayDiff = dayDifference(cal, status); |
143 | 165 |
144 // look up string | 166 // look up string |
145 int32_t len = 0; | 167 int32_t len = 0; |
146 const UChar *theString = getStringForDay(dayDiff, len, status); | 168 const UChar *theString = getStringForDay(dayDiff, len, status); |
147 if(U_SUCCESS(status) && (theString!=NULL)) { | 169 if(U_SUCCESS(status) && (theString!=NULL)) { |
148 // found a relative string | 170 // found a relative string |
149 relativeDayString.setTo(theString, len); | 171 relativeDayString.setTo(theString, len); |
150 } | 172 } |
151 | 173 |
| 174 if ( relativeDayString.length() > 0 && !fDatePattern.isEmpty() && |
| 175 (fTimePattern.isEmpty() || fCombinedFormat == NULL || fCombinedHasDateA
tStart)) { |
| 176 #if !UCONFIG_NO_BREAK_ITERATION |
| 177 // capitalize relativeDayString according to context for relative, set f
ormatter no context |
| 178 if ( u_islower(relativeDayString.char32At(0)) && fCapitalizationBrkIter!
= NULL && |
| 179 ( capitalizationContext==UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_S
ENTENCE || |
| 180 (capitalizationContext==UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_ME
NU && fCapitalizationOfRelativeUnitsForUIListMenu) || |
| 181 (capitalizationContext==UDISPCTX_CAPITALIZATION_FOR_STANDALONE &&
fCapitalizationOfRelativeUnitsForStandAlone) ) ) { |
| 182 // titlecase first word of relativeDayString |
| 183 relativeDayString.toTitle(fCapitalizationBrkIter, fLocale, U_TITLECA
SE_NO_LOWERCASE | U_TITLECASE_NO_BREAK_ADJUSTMENT); |
| 184 } |
| 185 #endif |
| 186 fDateTimeFormatter->setContext(UDISPCTX_CAPITALIZATION_NONE, status); |
| 187 } else { |
| 188 // set our context for the formatter |
| 189 fDateTimeFormatter->setContext(capitalizationContext, status); |
| 190 } |
| 191 |
152 if (fDatePattern.isEmpty()) { | 192 if (fDatePattern.isEmpty()) { |
153 fDateTimeFormatter->applyPattern(fTimePattern); | 193 fDateTimeFormatter->applyPattern(fTimePattern); |
154 fDateTimeFormatter->format(cal,appendTo,pos); | 194 fDateTimeFormatter->format(cal,appendTo,pos); |
155 } else if (fTimePattern.isEmpty() || fCombinedFormat == NULL) { | 195 } else if (fTimePattern.isEmpty() || fCombinedFormat == NULL) { |
156 if (relativeDayString.length() > 0) { | 196 if (relativeDayString.length() > 0) { |
157 appendTo.append(relativeDayString); | 197 appendTo.append(relativeDayString); |
158 } else { | 198 } else { |
159 fDateTimeFormatter->applyPattern(fDatePattern); | 199 fDateTimeFormatter->applyPattern(fDatePattern); |
160 fDateTimeFormatter->format(cal,appendTo,pos); | 200 fDateTimeFormatter->format(cal,appendTo,pos); |
161 } | 201 } |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 fTimePattern.setTo(timePattern); | 417 fTimePattern.setTo(timePattern); |
378 } | 418 } |
379 } | 419 } |
380 | 420 |
381 const DateFormatSymbols* | 421 const DateFormatSymbols* |
382 RelativeDateFormat::getDateFormatSymbols() const | 422 RelativeDateFormat::getDateFormatSymbols() const |
383 { | 423 { |
384 return fDateTimeFormatter->getDateFormatSymbols(); | 424 return fDateTimeFormatter->getDateFormatSymbols(); |
385 } | 425 } |
386 | 426 |
| 427 // override the DateFormat implementation in order to |
| 428 // lazily initialize relevant items |
| 429 void |
| 430 RelativeDateFormat::setContext(UDisplayContext value, UErrorCode& status) |
| 431 { |
| 432 DateFormat::setContext(value, status); |
| 433 if (U_SUCCESS(status)) { |
| 434 if (!fCapitalizationInfoSet && |
| 435 (value==UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || value==UD
ISPCTX_CAPITALIZATION_FOR_STANDALONE)) { |
| 436 initCapitalizationContextInfo(fLocale); |
| 437 fCapitalizationInfoSet = TRUE; |
| 438 } |
| 439 #if !UCONFIG_NO_BREAK_ITERATION |
| 440 if ( fCapitalizationBrkIter == NULL && (value==UDISPCTX_CAPITALIZATION_F
OR_BEGINNING_OF_SENTENCE || |
| 441 (value==UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU && fCapitali
zationOfRelativeUnitsForUIListMenu) || |
| 442 (value==UDISPCTX_CAPITALIZATION_FOR_STANDALONE && fCapitalizatio
nOfRelativeUnitsForStandAlone)) ) { |
| 443 UErrorCode status = U_ZERO_ERROR; |
| 444 fCapitalizationBrkIter = BreakIterator::createSentenceInstance(fLoca
le, status); |
| 445 if (U_FAILURE(status)) { |
| 446 delete fCapitalizationBrkIter; |
| 447 fCapitalizationBrkIter = NULL; |
| 448 } |
| 449 } |
| 450 #endif |
| 451 } |
| 452 } |
| 453 |
| 454 void |
| 455 RelativeDateFormat::initCapitalizationContextInfo(const Locale& thelocale) |
| 456 { |
| 457 #if !UCONFIG_NO_BREAK_ITERATION |
| 458 const char * localeID = (thelocale != NULL)? thelocale.getBaseName(): NULL; |
| 459 UErrorCode status = U_ZERO_ERROR; |
| 460 UResourceBundle *rb = ures_open(NULL, localeID, &status); |
| 461 rb = ures_getByKeyWithFallback(rb, "contextTransforms", rb, &status); |
| 462 rb = ures_getByKeyWithFallback(rb, "relative", rb, &status); |
| 463 if (U_SUCCESS(status) && rb != NULL) { |
| 464 int32_t len = 0; |
| 465 const int32_t * intVector = ures_getIntVector(rb, &len, &status); |
| 466 if (U_SUCCESS(status) && intVector != NULL && len >= 2) { |
| 467 fCapitalizationOfRelativeUnitsForUIListMenu = intVector[0]; |
| 468 fCapitalizationOfRelativeUnitsForStandAlone = intVector[1]; |
| 469 } |
| 470 } |
| 471 ures_close(rb); |
| 472 #endif |
| 473 } |
| 474 |
| 475 static const UChar patItem1[] = {0x7B,0x31,0x7D}; // "{1}" |
| 476 static const int32_t patItem1Len = 3; |
| 477 |
387 void RelativeDateFormat::loadDates(UErrorCode &status) { | 478 void RelativeDateFormat::loadDates(UErrorCode &status) { |
388 CalendarData calData(fLocale, "gregorian", status); | 479 CalendarData calData(fLocale, "gregorian", status); |
389 | 480 |
390 UErrorCode tempStatus = status; | 481 UErrorCode tempStatus = status; |
391 UResourceBundle *dateTimePatterns = calData.getByKey(DT_DateTimePatternsTag,
tempStatus); | 482 UResourceBundle *dateTimePatterns = calData.getByKey(DT_DateTimePatternsTag,
tempStatus); |
392 if(U_SUCCESS(tempStatus)) { | 483 if(U_SUCCESS(tempStatus)) { |
393 int32_t patternsSize = ures_getSize(dateTimePatterns); | 484 int32_t patternsSize = ures_getSize(dateTimePatterns); |
394 if (patternsSize > kDateTime) { | 485 if (patternsSize > kDateTime) { |
395 int32_t resStrLen = 0; | 486 int32_t resStrLen = 0; |
396 | 487 |
(...skipping 16 matching lines...) Expand all Loading... |
413 case kShortRelative: | 504 case kShortRelative: |
414 case kShort: | 505 case kShort: |
415 glueIndex = kDateTimeOffset + kShort; | 506 glueIndex = kDateTimeOffset + kShort; |
416 break; | 507 break; |
417 default: | 508 default: |
418 break; | 509 break; |
419 } | 510 } |
420 } | 511 } |
421 | 512 |
422 const UChar *resStr = ures_getStringByIndex(dateTimePatterns, glueIn
dex, &resStrLen, &tempStatus); | 513 const UChar *resStr = ures_getStringByIndex(dateTimePatterns, glueIn
dex, &resStrLen, &tempStatus); |
| 514 if (U_SUCCESS(tempStatus) && resStrLen >= patItem1Len && u_strncmp(r
esStr,patItem1,patItem1Len)==0) { |
| 515 fCombinedHasDateAtStart = TRUE; |
| 516 } |
423 fCombinedFormat = new MessageFormat(UnicodeString(TRUE, resStr, resS
trLen), fLocale, tempStatus); | 517 fCombinedFormat = new MessageFormat(UnicodeString(TRUE, resStr, resS
trLen), fLocale, tempStatus); |
424 } | 518 } |
425 } | 519 } |
426 | 520 |
427 UResourceBundle *rb = ures_open(NULL, fLocale.getBaseName(), &status); | 521 UResourceBundle *rb = ures_open(NULL, fLocale.getBaseName(), &status); |
428 UResourceBundle *sb = ures_getByKeyWithFallback(rb, "fields", NULL, &status)
; | 522 rb = ures_getByKeyWithFallback(rb, "fields", rb, &status); |
429 rb = ures_getByKeyWithFallback(sb, "day", rb, &status); | 523 rb = ures_getByKeyWithFallback(rb, "day", rb, &status); |
430 sb = ures_getByKeyWithFallback(rb, "relative", sb, &status); | 524 rb = ures_getByKeyWithFallback(rb, "relative", rb, &status); |
431 ures_close(rb); | |
432 // set up min/max | 525 // set up min/max |
433 fDayMin=-1; | 526 fDayMin=-1; |
434 fDayMax=1; | 527 fDayMax=1; |
435 | 528 |
436 if(U_FAILURE(status)) { | 529 if(U_FAILURE(status)) { |
437 fDatesLen=0; | 530 fDatesLen=0; |
438 ures_close(sb); | 531 ures_close(rb); |
439 return; | 532 return; |
440 } | 533 } |
441 | 534 |
442 fDatesLen = ures_getSize(sb); | 535 fDatesLen = ures_getSize(rb); |
443 fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); | 536 fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); |
444 | 537 |
445 // Load in each item into the array... | 538 // Load in each item into the array... |
446 int n = 0; | 539 int n = 0; |
447 | 540 |
448 UResourceBundle *subString = NULL; | 541 UResourceBundle *subString = NULL; |
449 | 542 |
450 while(ures_hasNext(sb) && U_SUCCESS(status)) { // iterate over items | 543 while(ures_hasNext(rb) && U_SUCCESS(status)) { // iterate over items |
451 subString = ures_getNextResource(sb, subString, &status); | 544 subString = ures_getNextResource(rb, subString, &status); |
452 | 545 |
453 if(U_FAILURE(status) || (subString==NULL)) break; | 546 if(U_FAILURE(status) || (subString==NULL)) break; |
454 | 547 |
455 // key = offset # | 548 // key = offset # |
456 const char *key = ures_getKey(subString); | 549 const char *key = ures_getKey(subString); |
457 | 550 |
458 // load the string and length | 551 // load the string and length |
459 int32_t aLen; | 552 int32_t aLen; |
460 const UChar* aString = ures_getString(subString, &aLen, &status); | 553 const UChar* aString = ures_getString(subString, &aLen, &status); |
461 | 554 |
(...skipping 11 matching lines...) Expand all Loading... |
473 } | 566 } |
474 | 567 |
475 // copy the string pointer | 568 // copy the string pointer |
476 fDates[n].offset = offset; | 569 fDates[n].offset = offset; |
477 fDates[n].string = aString; | 570 fDates[n].string = aString; |
478 fDates[n].len = aLen; | 571 fDates[n].len = aLen; |
479 | 572 |
480 n++; | 573 n++; |
481 } | 574 } |
482 ures_close(subString); | 575 ures_close(subString); |
483 ures_close(sb); | 576 ures_close(rb); |
484 | 577 |
485 // the fDates[] array could be sorted here, for direct access. | 578 // the fDates[] array could be sorted here, for direct access. |
486 } | 579 } |
487 | 580 |
| 581 //---------------------------------------------------------------------- |
488 | 582 |
489 // this should to be in DateFormat, instead it was copied from SimpleDateFormat. | 583 // this should to be in DateFormat, instead it was copied from SimpleDateFormat. |
490 | 584 |
491 Calendar* | 585 Calendar* |
492 RelativeDateFormat::initializeCalendar(TimeZone* adoptZone, const Locale& locale
, UErrorCode& status) | 586 RelativeDateFormat::initializeCalendar(TimeZone* adoptZone, const Locale& locale
, UErrorCode& status) |
493 { | 587 { |
494 if(!U_FAILURE(status)) { | 588 if(!U_FAILURE(status)) { |
495 fCalendar = Calendar::createInstance(adoptZone?adoptZone:TimeZone::creat
eDefault(), locale, status); | 589 fCalendar = Calendar::createInstance(adoptZone?adoptZone:TimeZone::creat
eDefault(), locale, status); |
496 } | 590 } |
497 if (U_SUCCESS(status) && fCalendar == NULL) { | 591 if (U_SUCCESS(status) && fCalendar == NULL) { |
(...skipping 16 matching lines...) Expand all Loading... |
514 int32_t dayDiff = cal.get(UCAL_JULIAN_DAY, status) - nowCal->get(UCAL_JULIAN
_DAY, status); | 608 int32_t dayDiff = cal.get(UCAL_JULIAN_DAY, status) - nowCal->get(UCAL_JULIAN
_DAY, status); |
515 | 609 |
516 delete nowCal; | 610 delete nowCal; |
517 return dayDiff; | 611 return dayDiff; |
518 } | 612 } |
519 | 613 |
520 U_NAMESPACE_END | 614 U_NAMESPACE_END |
521 | 615 |
522 #endif | 616 #endif |
523 | 617 |
OLD | NEW |