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
00612
00636 UnicodeString& fallbackFormat(Calendar& fromCalendar,
00637 Calendar& toCalendar,
00638 UnicodeString& appendTo,
00639 FieldPosition& pos,
00640 UErrorCode& status) const;
00641
00642
00643
00679 void initializePattern(UErrorCode& status);
00680
00681
00682
00691 void setFallbackPattern(UCalendarDateFields field,
00692 const UnicodeString& skeleton,
00693 UErrorCode& status);
00694
00695
00696
00722 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton,
00723 UnicodeString& date,
00724 UnicodeString& normalizedDate,
00725 UnicodeString& time,
00726 UnicodeString& normalizedTime);
00727
00728
00729
00754 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
00755 const UnicodeString& timeSkeleton);
00756
00757
00758
00759
00784 UBool setIntervalPattern(UCalendarDateFields field,
00785 const UnicodeString* skeleton,
00786 const UnicodeString* bestSkeleton,
00787 int8_t differenceInfo,
00788 UnicodeString* extendedSkeleton = NULL,
00789 UnicodeString* extendedBestSkeleton = NULL);
00790
00820 static void U_EXPORT2 adjustFieldWidth(
00821 const UnicodeString& inputSkeleton,
00822 const UnicodeString& bestMatchSkeleton,
00823 const UnicodeString& bestMatchIntervalPattern,
00824 int8_t differenceInfo,
00825 UnicodeString& adjustedIntervalPattern);
00826
00840 void concatSingleDate2TimeInterval(const UChar* format,
00841 int32_t formatLen,
00842 const UnicodeString& datePattern,
00843 UCalendarDateFields field,
00844 UErrorCode& status);
00845
00853 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field,
00854 const UnicodeString& skeleton);
00855
00856
00863 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern);
00864
00865
00872 void setIntervalPattern(UCalendarDateFields field,
00873 const UnicodeString& intervalPattern);
00874
00875
00883 void setIntervalPattern(UCalendarDateFields field,
00884 const UnicodeString& intervalPattern,
00885 UBool laterDateFirst);
00886
00887
00898 void setPatternInfo(UCalendarDateFields field,
00899 const UnicodeString* firstPart,
00900 const UnicodeString* secondpart,
00901 UBool laterDateFirst);
00902
00903
00904
00905 static const UChar fgCalendarFieldToPatternLetter[];
00906
00907
00911 DateIntervalInfo* fInfo;
00912
00916 SimpleDateFormat* fDateFormat;
00917
00923 Calendar* fFromCalendar;
00924 Calendar* fToCalendar;
00925
00929 DateTimePatternGenerator* fDtpng;
00930
00934 UnicodeString fSkeleton;
00935 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX];
00936 };
00937
00938
00939
00940
00941
00942
00943 inline UBool
00944 DateIntervalFormat::operator!=(const Format& other) const {
00945 return !operator==(other);
00946 }
00947
00948 U_NAMESPACE_END
00949
00950 #endif
00951
00952 #endif // _DTITVFMT_H__
00953