00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __DTITVFMT_H__
00011 #define __DTITVFMT_H__
00012
00013
00014 #include "unicode/utypes.h"
00015
00021 #if !UCONFIG_NO_FORMATTING
00022
00023 #include "unicode/ucal.h"
00024 #include "unicode/smpdtfmt.h"
00025 #include "unicode/dtintrv.h"
00026 #include "unicode/dtitvinf.h"
00027 #include "unicode/dtptngen.h"
00028
00029 U_NAMESPACE_BEGIN
00030
00031
00032
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
00381 virtual UnicodeString& format(const Formattable& obj,
00382 UnicodeString& appendTo,
00383 FieldPosition& fieldPosition,
00384 UErrorCode& status) const ;
00385
00386
00387
00400 UnicodeString& format(const DateInterval* dtInterval,
00401 UnicodeString& appendTo,
00402 FieldPosition& fieldPosition,
00403 UErrorCode& status) const ;
00404
00405
00426 UnicodeString& format(Calendar& fromCalendar,
00427 Calendar& toCalendar,
00428 UnicodeString& appendTo,
00429 FieldPosition& fieldPosition,
00430 UErrorCode& status) const ;
00431
00458 virtual void parseObject(const UnicodeString& source,
00459 Formattable& result,
00460 ParsePosition& parse_pos) const;
00461
00462
00469 const DateIntervalInfo* getDateIntervalInfo(void) const;
00470
00471
00478 void setDateIntervalInfo(const DateIntervalInfo& newIntervalPatterns,
00479 UErrorCode& status);
00480
00481
00487 const DateFormat* getDateFormat(void) const;
00488
00500 static UClassID U_EXPORT2 getStaticClassID(void);
00501
00513 virtual UClassID getDynamicClassID(void) const;
00514
00515 protected:
00516
00521 DateIntervalFormat(const DateIntervalFormat&);
00522
00527 DateIntervalFormat& operator=(const DateIntervalFormat&);
00528
00529 private:
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545 struct PatternInfo {
00546 UnicodeString firstPart;
00547 UnicodeString secondPart;
00561 UBool laterDateFirst;
00562 };
00563
00564
00569 DateIntervalFormat();
00570
00590 DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo,
00591 const UnicodeString* skeleton, UErrorCode& status);
00592
00593
00607 static DateIntervalFormat* U_EXPORT2 create(const Locale& locale,
00608 DateIntervalInfo* dtitvinf,
00609 const UnicodeString* skeleton,
00610 UErrorCode& status);
00611
00625 static SimpleDateFormat* U_EXPORT2 createSDFPatternInstance(
00626 const UnicodeString& skeleton,
00627 const Locale& locale,
00628 DateTimePatternGenerator* dtpng,
00629 UErrorCode& status);
00630
00631
00655 UnicodeString& fallbackFormat(Calendar& fromCalendar,
00656 Calendar& toCalendar,
00657 UnicodeString& appendTo,
00658 FieldPosition& pos,
00659 UErrorCode& status) const;
00660
00661
00662
00698 void initializePattern(UErrorCode& status);
00699
00700
00701
00710 void setFallbackPattern(UCalendarDateFields field,
00711 const UnicodeString& skeleton,
00712 UErrorCode& status);
00713
00714
00715
00741 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton,
00742 UnicodeString& date,
00743 UnicodeString& normalizedDate,
00744 UnicodeString& time,
00745 UnicodeString& normalizedTime);
00746
00747
00748
00773 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
00774 const UnicodeString& timeSkeleton);
00775
00776
00777
00778
00803 UBool setIntervalPattern(UCalendarDateFields field,
00804 const UnicodeString* skeleton,
00805 const UnicodeString* bestSkeleton,
00806 int8_t differenceInfo,
00807 UnicodeString* extendedSkeleton = NULL,
00808 UnicodeString* extendedBestSkeleton = NULL);
00809
00839 static void U_EXPORT2 adjustFieldWidth(
00840 const UnicodeString& inputSkeleton,
00841 const UnicodeString& bestMatchSkeleton,
00842 const UnicodeString& bestMatchIntervalPattern,
00843 int8_t differenceInfo,
00844 UnicodeString& adjustedIntervalPattern);
00845
00859 void concatSingleDate2TimeInterval(const UChar* format,
00860 int32_t formatLen,
00861 const UnicodeString& datePattern,
00862 UCalendarDateFields field,
00863 UErrorCode& status);
00864
00872 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field,
00873 const UnicodeString& skeleton);
00874
00875
00882 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern);
00883
00884
00891 void setIntervalPattern(UCalendarDateFields field,
00892 const UnicodeString& intervalPattern);
00893
00894
00902 void setIntervalPattern(UCalendarDateFields field,
00903 const UnicodeString& intervalPattern,
00904 UBool laterDateFirst);
00905
00906
00917 void setPatternInfo(UCalendarDateFields field,
00918 const UnicodeString* firstPart,
00919 const UnicodeString* secondpart,
00920 UBool laterDateFirst);
00921
00922
00923
00924 static const UChar fgCalendarFieldToPatternLetter[];
00925
00926
00930 DateIntervalInfo* fInfo;
00931
00935 SimpleDateFormat* fDateFormat;
00936
00942 Calendar* fFromCalendar;
00943 Calendar* fToCalendar;
00944
00948 DateTimePatternGenerator* fDtpng;
00949
00953 UnicodeString fSkeleton;
00954 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX];
00955 };
00956
00957
00958
00959
00960
00961
00962 inline UBool
00963 DateIntervalFormat::operator!=(const Format& other) const {
00964 return !operator==(other);
00965 }
00966
00967 U_NAMESPACE_END
00968
00969 #endif
00970
00971 #endif // _DTITVFMT_H__
00972