ICU 4.8.1.1
4.8.1.1
|
00001 /******************************************************************************** 00002 * Copyright (C) 2008-2011, International Business Machines Corporation and 00003 * others. All Rights Reserved. 00004 ******************************************************************************* 00005 * 00006 * File DTITVFMT.H 00007 * 00008 ******************************************************************************* 00009 */ 00010 00011 #ifndef __DTITVFMT_H__ 00012 #define __DTITVFMT_H__ 00013 00014 00015 #include "unicode/utypes.h" 00016 00022 #if !UCONFIG_NO_FORMATTING 00023 00024 #include "unicode/ucal.h" 00025 #include "unicode/smpdtfmt.h" 00026 #include "unicode/dtintrv.h" 00027 #include "unicode/dtitvinf.h" 00028 #include "unicode/dtptngen.h" 00029 00030 U_NAMESPACE_BEGIN 00031 00032 00033 00218 class U_I18N_API DateIntervalFormat : public Format { 00219 public: 00220 00234 static DateIntervalFormat* U_EXPORT2 createInstance( 00235 const UnicodeString& skeleton, 00236 UErrorCode& status); 00237 00267 static DateIntervalFormat* U_EXPORT2 createInstance( 00268 const UnicodeString& skeleton, 00269 const Locale& locale, 00270 UErrorCode& status); 00271 00287 static DateIntervalFormat* U_EXPORT2 createInstance( 00288 const UnicodeString& skeleton, 00289 const DateIntervalInfo& dtitvinf, 00290 UErrorCode& status); 00291 00327 static DateIntervalFormat* U_EXPORT2 createInstance( 00328 const UnicodeString& skeleton, 00329 const Locale& locale, 00330 const DateIntervalInfo& dtitvinf, 00331 UErrorCode& status); 00332 00337 virtual ~DateIntervalFormat(); 00338 00345 virtual Format* clone(void) const; 00346 00354 virtual UBool operator==(const Format& other) const; 00355 00363 UBool operator!=(const Format& other) const; 00364 00365 00366 using Format::format; 00367 00384 virtual UnicodeString& format(const Formattable& obj, 00385 UnicodeString& appendTo, 00386 FieldPosition& fieldPosition, 00387 UErrorCode& status) const ; 00388 00389 00390 00403 UnicodeString& format(const DateInterval* dtInterval, 00404 UnicodeString& appendTo, 00405 FieldPosition& fieldPosition, 00406 UErrorCode& status) const ; 00407 00408 00429 UnicodeString& format(Calendar& fromCalendar, 00430 Calendar& toCalendar, 00431 UnicodeString& appendTo, 00432 FieldPosition& fieldPosition, 00433 UErrorCode& status) const ; 00434 00461 virtual void parseObject(const UnicodeString& source, 00462 Formattable& result, 00463 ParsePosition& parse_pos) const; 00464 00465 00472 const DateIntervalInfo* getDateIntervalInfo(void) const; 00473 00474 00481 void setDateIntervalInfo(const DateIntervalInfo& newIntervalPatterns, 00482 UErrorCode& status); 00483 00484 00490 const DateFormat* getDateFormat(void) const; 00491 00497 virtual const TimeZone& getTimeZone(void) const; 00498 00505 virtual void adoptTimeZone(TimeZone* zoneToAdopt); 00506 00512 virtual void setTimeZone(const TimeZone& zone); 00513 00525 static UClassID U_EXPORT2 getStaticClassID(void); 00526 00538 virtual UClassID getDynamicClassID(void) const; 00539 00540 protected: 00541 00546 DateIntervalFormat(const DateIntervalFormat&); 00547 00552 DateIntervalFormat& operator=(const DateIntervalFormat&); 00553 00554 private: 00555 00556 /* 00557 * This is for ICU internal use only. Please do not use. 00558 * Save the interval pattern information. 00559 * Interval pattern consists of 2 single date patterns and the separator. 00560 * For example, interval pattern "MMM d - MMM d, yyyy" consists 00561 * a single date pattern "MMM d", another single date pattern "MMM d, yyyy", 00562 * and a separator "-". 00563 * The pattern is divided into 2 parts. For above example, 00564 * the first part is "MMM d - ", and the second part is "MMM d, yyyy". 00565 * Also, the first date appears in an interval pattern could be 00566 * the earlier date or the later date. 00567 * And such information is saved in the interval pattern as well. 00568 * @internal ICU 4.0 00569 */ 00570 struct PatternInfo { 00571 UnicodeString firstPart; 00572 UnicodeString secondPart; 00586 UBool laterDateFirst; 00587 }; 00588 00589 00594 DateIntervalFormat(); 00595 00615 DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo, 00616 const UnicodeString* skeleton, UErrorCode& status); 00617 00618 00632 static DateIntervalFormat* U_EXPORT2 create(const Locale& locale, 00633 DateIntervalInfo* dtitvinf, 00634 const UnicodeString* skeleton, 00635 UErrorCode& status); 00636 00650 static SimpleDateFormat* U_EXPORT2 createSDFPatternInstance( 00651 const UnicodeString& skeleton, 00652 const Locale& locale, 00653 DateTimePatternGenerator* dtpng, 00654 UErrorCode& status); 00655 00656 00680 UnicodeString& fallbackFormat(Calendar& fromCalendar, 00681 Calendar& toCalendar, 00682 UnicodeString& appendTo, 00683 FieldPosition& pos, 00684 UErrorCode& status) const; 00685 00686 00687 00723 void initializePattern(UErrorCode& status); 00724 00725 00726 00735 void setFallbackPattern(UCalendarDateFields field, 00736 const UnicodeString& skeleton, 00737 UErrorCode& status); 00738 00739 00740 00766 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton, 00767 UnicodeString& date, 00768 UnicodeString& normalizedDate, 00769 UnicodeString& time, 00770 UnicodeString& normalizedTime); 00771 00772 00773 00798 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton, 00799 const UnicodeString& timeSkeleton); 00800 00801 00802 00803 00828 UBool setIntervalPattern(UCalendarDateFields field, 00829 const UnicodeString* skeleton, 00830 const UnicodeString* bestSkeleton, 00831 int8_t differenceInfo, 00832 UnicodeString* extendedSkeleton = NULL, 00833 UnicodeString* extendedBestSkeleton = NULL); 00834 00864 static void U_EXPORT2 adjustFieldWidth( 00865 const UnicodeString& inputSkeleton, 00866 const UnicodeString& bestMatchSkeleton, 00867 const UnicodeString& bestMatchIntervalPattern, 00868 int8_t differenceInfo, 00869 UnicodeString& adjustedIntervalPattern); 00870 00884 void concatSingleDate2TimeInterval(const UChar* format, 00885 int32_t formatLen, 00886 const UnicodeString& datePattern, 00887 UCalendarDateFields field, 00888 UErrorCode& status); 00889 00897 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field, 00898 const UnicodeString& skeleton); 00899 00900 00907 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern); 00908 00909 00916 void setIntervalPattern(UCalendarDateFields field, 00917 const UnicodeString& intervalPattern); 00918 00919 00927 void setIntervalPattern(UCalendarDateFields field, 00928 const UnicodeString& intervalPattern, 00929 UBool laterDateFirst); 00930 00931 00942 void setPatternInfo(UCalendarDateFields field, 00943 const UnicodeString* firstPart, 00944 const UnicodeString* secondPart, 00945 UBool laterDateFirst); 00946 00947 00948 // from calendar field to pattern letter 00949 static const UChar fgCalendarFieldToPatternLetter[]; 00950 00951 00955 DateIntervalInfo* fInfo; 00956 00960 SimpleDateFormat* fDateFormat; 00961 00967 Calendar* fFromCalendar; 00968 Calendar* fToCalendar; 00969 00973 DateTimePatternGenerator* fDtpng; 00974 00978 UnicodeString fSkeleton; 00979 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX]; 00980 }; 00981 00982 inline UBool 00983 DateIntervalFormat::operator!=(const Format& other) const { 00984 return !operator==(other); 00985 } 00986 00987 U_NAMESPACE_END 00988 00989 #endif /* #if !UCONFIG_NO_FORMATTING */ 00990 00991 #endif // _DTITVFMT_H__ 00992 //eof