00001
00002
00003
00004
00005
00006
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
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
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
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
00990
00991 #endif // _DTITVFMT_H__
00992