ICU 4.6 4.6
|
00001 /******************************************************************************** 00002 * Copyright (C) 2008-2010, 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 00503 static UClassID U_EXPORT2 getStaticClassID(void); 00504 00516 virtual UClassID getDynamicClassID(void) const; 00517 00518 protected: 00519 00524 DateIntervalFormat(const DateIntervalFormat&); 00525 00530 DateIntervalFormat& operator=(const DateIntervalFormat&); 00531 00532 private: 00533 00534 /* 00535 * This is for ICU internal use only. Please do not use. 00536 * Save the interval pattern information. 00537 * Interval pattern consists of 2 single date patterns and the separator. 00538 * For example, interval pattern "MMM d - MMM d, yyyy" consists 00539 * a single date pattern "MMM d", another single date pattern "MMM d, yyyy", 00540 * and a separator "-". 00541 * The pattern is divided into 2 parts. For above example, 00542 * the first part is "MMM d - ", and the second part is "MMM d, yyyy". 00543 * Also, the first date appears in an interval pattern could be 00544 * the earlier date or the later date. 00545 * And such information is saved in the interval pattern as well. 00546 * @internal ICU 4.0 00547 */ 00548 struct PatternInfo { 00549 UnicodeString firstPart; 00550 UnicodeString secondPart; 00564 UBool laterDateFirst; 00565 }; 00566 00567 00572 DateIntervalFormat(); 00573 00593 DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo, 00594 const UnicodeString* skeleton, UErrorCode& status); 00595 00596 00610 static DateIntervalFormat* U_EXPORT2 create(const Locale& locale, 00611 DateIntervalInfo* dtitvinf, 00612 const UnicodeString* skeleton, 00613 UErrorCode& status); 00614 00628 static SimpleDateFormat* U_EXPORT2 createSDFPatternInstance( 00629 const UnicodeString& skeleton, 00630 const Locale& locale, 00631 DateTimePatternGenerator* dtpng, 00632 UErrorCode& status); 00633 00634 00658 UnicodeString& fallbackFormat(Calendar& fromCalendar, 00659 Calendar& toCalendar, 00660 UnicodeString& appendTo, 00661 FieldPosition& pos, 00662 UErrorCode& status) const; 00663 00664 00665 00701 void initializePattern(UErrorCode& status); 00702 00703 00704 00713 void setFallbackPattern(UCalendarDateFields field, 00714 const UnicodeString& skeleton, 00715 UErrorCode& status); 00716 00717 00718 00744 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton, 00745 UnicodeString& date, 00746 UnicodeString& normalizedDate, 00747 UnicodeString& time, 00748 UnicodeString& normalizedTime); 00749 00750 00751 00776 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton, 00777 const UnicodeString& timeSkeleton); 00778 00779 00780 00781 00806 UBool setIntervalPattern(UCalendarDateFields field, 00807 const UnicodeString* skeleton, 00808 const UnicodeString* bestSkeleton, 00809 int8_t differenceInfo, 00810 UnicodeString* extendedSkeleton = NULL, 00811 UnicodeString* extendedBestSkeleton = NULL); 00812 00842 static void U_EXPORT2 adjustFieldWidth( 00843 const UnicodeString& inputSkeleton, 00844 const UnicodeString& bestMatchSkeleton, 00845 const UnicodeString& bestMatchIntervalPattern, 00846 int8_t differenceInfo, 00847 UnicodeString& adjustedIntervalPattern); 00848 00862 void concatSingleDate2TimeInterval(const UChar* format, 00863 int32_t formatLen, 00864 const UnicodeString& datePattern, 00865 UCalendarDateFields field, 00866 UErrorCode& status); 00867 00875 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field, 00876 const UnicodeString& skeleton); 00877 00878 00885 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern); 00886 00887 00894 void setIntervalPattern(UCalendarDateFields field, 00895 const UnicodeString& intervalPattern); 00896 00897 00905 void setIntervalPattern(UCalendarDateFields field, 00906 const UnicodeString& intervalPattern, 00907 UBool laterDateFirst); 00908 00909 00920 void setPatternInfo(UCalendarDateFields field, 00921 const UnicodeString* firstPart, 00922 const UnicodeString* secondpart, 00923 UBool laterDateFirst); 00924 00925 00926 // from calendar field to pattern letter 00927 static const UChar fgCalendarFieldToPatternLetter[]; 00928 00929 00933 DateIntervalInfo* fInfo; 00934 00938 SimpleDateFormat* fDateFormat; 00939 00945 Calendar* fFromCalendar; 00946 Calendar* fToCalendar; 00947 00951 DateTimePatternGenerator* fDtpng; 00952 00956 UnicodeString fSkeleton; 00957 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX]; 00958 }; 00959 00960 inline UBool 00961 DateIntervalFormat::operator!=(const Format& other) const { 00962 return !operator==(other); 00963 } 00964 00965 U_NAMESPACE_END 00966 00967 #endif /* #if !UCONFIG_NO_FORMATTING */ 00968 00969 #endif // _DTITVFMT_H__ 00970 //eof