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
00220 class U_I18N_API DateIntervalFormat : public Format {
00221 public:
00222
00236 static DateIntervalFormat* U_EXPORT2 createInstance(
00237 const UnicodeString& skeleton,
00238 UErrorCode& status);
00239
00274 static DateIntervalFormat* U_EXPORT2 createInstance(
00275 const UnicodeString& skeleton,
00276 const Locale& locale,
00277 UErrorCode& status);
00278
00294 static DateIntervalFormat* U_EXPORT2 createInstance(
00295 const UnicodeString& skeleton,
00296 const DateIntervalInfo& dtitvinf,
00297 UErrorCode& status);
00298
00339 static DateIntervalFormat* U_EXPORT2 createInstance(
00340 const UnicodeString& skeleton,
00341 const Locale& locale,
00342 const DateIntervalInfo& dtitvinf,
00343 UErrorCode& status);
00344
00349 virtual ~DateIntervalFormat();
00350
00357 virtual Format* clone(void) const;
00358
00366 virtual UBool operator==(const Format& other) const;
00367
00375 UBool operator!=(const Format& other) const;
00376
00377
00378 using Format::format;
00379
00399 virtual UnicodeString& format(const Formattable& obj,
00400 UnicodeString& appendTo,
00401 FieldPosition& fieldPosition,
00402 UErrorCode& status) const ;
00403
00404
00405
00421 UnicodeString& format(const DateInterval* dtInterval,
00422 UnicodeString& appendTo,
00423 FieldPosition& fieldPosition,
00424 UErrorCode& status) const ;
00425
00426
00450 UnicodeString& format(Calendar& fromCalendar,
00451 Calendar& toCalendar,
00452 UnicodeString& appendTo,
00453 FieldPosition& fieldPosition,
00454 UErrorCode& status) const ;
00455
00482 virtual void parseObject(const UnicodeString& source,
00483 Formattable& result,
00484 ParsePosition& parse_pos) const;
00485
00486
00493 const DateIntervalInfo* getDateIntervalInfo(void) const;
00494
00495
00502 void setDateIntervalInfo(const DateIntervalInfo& newIntervalPatterns,
00503 UErrorCode& status);
00504
00505
00517 const DateFormat* getDateFormat(void) const;
00518
00524 virtual const TimeZone& getTimeZone(void) const;
00525
00532 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00533
00539 virtual void setTimeZone(const TimeZone& zone);
00540
00552 static UClassID U_EXPORT2 getStaticClassID(void);
00553
00565 virtual UClassID getDynamicClassID(void) const;
00566
00567 protected:
00568
00573 DateIntervalFormat(const DateIntervalFormat&);
00574
00579 DateIntervalFormat& operator=(const DateIntervalFormat&);
00580
00581 private:
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596 struct PatternInfo {
00597 UnicodeString firstPart;
00598 UnicodeString secondPart;
00612 UBool laterDateFirst;
00613 };
00614
00615
00620 DateIntervalFormat();
00621
00640 DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo,
00641 const UnicodeString* skeleton, UErrorCode& status);
00642
00643
00656 static DateIntervalFormat* U_EXPORT2 create(const Locale& locale,
00657 DateIntervalInfo* dtitvinf,
00658 const UnicodeString* skeleton,
00659 UErrorCode& status);
00660
00681 static void
00682 adjustPosition(UnicodeString& combiningPattern,
00683 UnicodeString& pat0, FieldPosition& pos0,
00684 UnicodeString& pat1, FieldPosition& pos1,
00685 FieldPosition& posResult);
00686
00687
00710 UnicodeString& fallbackFormat(Calendar& fromCalendar,
00711 Calendar& toCalendar,
00712 UBool fromToOnSameDay,
00713 UnicodeString& appendTo,
00714 FieldPosition& pos,
00715 UErrorCode& status) const;
00716
00717
00718
00753 void initializePattern(UErrorCode& status);
00754
00755
00756
00764 void setFallbackPattern(UCalendarDateFields field,
00765 const UnicodeString& skeleton,
00766 UErrorCode& status);
00767
00768
00769
00794 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton,
00795 UnicodeString& date,
00796 UnicodeString& normalizedDate,
00797 UnicodeString& time,
00798 UnicodeString& normalizedTime);
00799
00800
00801
00825 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
00826 const UnicodeString& timeSkeleton);
00827
00828
00829
00830
00854 UBool setIntervalPattern(UCalendarDateFields field,
00855 const UnicodeString* skeleton,
00856 const UnicodeString* bestSkeleton,
00857 int8_t differenceInfo,
00858 UnicodeString* extendedSkeleton = NULL,
00859 UnicodeString* extendedBestSkeleton = NULL);
00860
00889 static void U_EXPORT2 adjustFieldWidth(
00890 const UnicodeString& inputSkeleton,
00891 const UnicodeString& bestMatchSkeleton,
00892 const UnicodeString& bestMatchIntervalPattern,
00893 int8_t differenceInfo,
00894 UnicodeString& adjustedIntervalPattern);
00895
00907 void concatSingleDate2TimeInterval(UnicodeString& format,
00908 const UnicodeString& datePattern,
00909 UCalendarDateFields field,
00910 UErrorCode& status);
00911
00918 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field,
00919 const UnicodeString& skeleton);
00920
00921
00927 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern);
00928
00929
00935 void setIntervalPattern(UCalendarDateFields field,
00936 const UnicodeString& intervalPattern);
00937
00938
00945 void setIntervalPattern(UCalendarDateFields field,
00946 const UnicodeString& intervalPattern,
00947 UBool laterDateFirst);
00948
00949
00959 void setPatternInfo(UCalendarDateFields field,
00960 const UnicodeString* firstPart,
00961 const UnicodeString* secondPart,
00962 UBool laterDateFirst);
00963
00989 UnicodeString& formatImpl(Calendar& fromCalendar,
00990 Calendar& toCalendar,
00991 UnicodeString& appendTo,
00992 FieldPosition& fieldPosition,
00993 UErrorCode& status) const ;
00994
00995
00996
00997 static const UChar fgCalendarFieldToPatternLetter[];
00998
00999
01003 DateIntervalInfo* fInfo;
01004
01008 SimpleDateFormat* fDateFormat;
01009
01015 Calendar* fFromCalendar;
01016 Calendar* fToCalendar;
01017
01018 Locale fLocale;
01019
01023 UnicodeString fSkeleton;
01024 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX];
01025
01029 UnicodeString* fDatePattern;
01030 UnicodeString* fTimePattern;
01031 UnicodeString* fDateTimeFormat;
01032 };
01033
01034 inline UBool
01035 DateIntervalFormat::operator!=(const Format& other) const {
01036 return !operator==(other);
01037 }
01038
01039 U_NAMESPACE_END
01040
01041 #endif
01042
01043 #endif // _DTITVFMT_H__
01044