RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatStyle dateStyle, const Locale& locale, UErrorCode& status) : DateFormat(), fDateFormat(NULL), fTimeFormat(NULL), fCombinedFormat(NULL), fDateStyle(dateStyle), fTimeStyle(timeStyle), fLocale(locale), fDatesLen(0), fDates(NULL) { if(U_FAILURE(status) ) { return; } if(fDateStyle != UDAT_NONE) { EStyle newStyle = (EStyle)(fDateStyle & ~UDAT_RELATIVE); // Create a DateFormat in the non-relative style requested. fDateFormat = createDateInstance(newStyle, locale); } if(fTimeStyle >= UDAT_FULL && fTimeStyle <= UDAT_SHORT) { fTimeFormat = createTimeInstance((EStyle)fTimeStyle, locale); } else if(fTimeStyle != UDAT_NONE) { // don't support other time styles (e.g. relative styles), for now status = U_ILLEGAL_ARGUMENT_ERROR; return; } // Initialize the parent fCalendar, so that parse() works correctly. initializeCalendar(NULL, locale, status); loadDates(status); }
RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatStyle dateStyle, const Locale& locale, UErrorCode& status) : DateFormat(), fDateTimeFormatter(NULL), fDatePattern(), fTimePattern(), fCombinedFormat(NULL), fDateStyle(dateStyle), fLocale(locale), fDatesLen(0), fDates(NULL), fCombinedHasDateAtStart(FALSE), fCapitalizationInfoSet(FALSE), fCapitalizationOfRelativeUnitsForUIListMenu(FALSE), fCapitalizationOfRelativeUnitsForStandAlone(FALSE), fCapitalizationBrkIter(NULL) { if(U_FAILURE(status) ) { return; } if (timeStyle < UDAT_NONE || timeStyle > UDAT_SHORT) { // don't support other time styles (e.g. relative styles), for now status = U_ILLEGAL_ARGUMENT_ERROR; return; } UDateFormatStyle baseDateStyle = (dateStyle > UDAT_SHORT)? (UDateFormatStyle)(dateStyle & ~UDAT_RELATIVE): dateStyle; DateFormat * df; // Get fDateTimeFormatter from either date or time style (does not matter, we will override the pattern). // We do need to get separate patterns for the date & time styles. if (baseDateStyle != UDAT_NONE) { df = createDateInstance((EStyle)baseDateStyle, locale); fDateTimeFormatter=dynamic_cast<SimpleDateFormat *>(df); if (fDateTimeFormatter == NULL) { status = U_UNSUPPORTED_ERROR; return; } fDateTimeFormatter->toPattern(fDatePattern); if (timeStyle != UDAT_NONE) { df = createTimeInstance((EStyle)timeStyle, locale); SimpleDateFormat *sdf = dynamic_cast<SimpleDateFormat *>(df); if (sdf != NULL) { sdf->toPattern(fTimePattern); delete sdf; } } } else { // does not matter whether timeStyle is UDAT_NONE, we need something for fDateTimeFormatter df = createTimeInstance((EStyle)timeStyle, locale); fDateTimeFormatter=dynamic_cast<SimpleDateFormat *>(df); if (fDateTimeFormatter == NULL) { status = U_UNSUPPORTED_ERROR; delete df; return; } fDateTimeFormatter->toPattern(fTimePattern); } // Initialize the parent fCalendar, so that parse() works correctly. initializeCalendar(NULL, locale, status); loadDates(status); }