00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef __DTITVFMT_H__
00014 #define __DTITVFMT_H__
00015
00016
00017 #include "unicode/utypes.h"
00018
00024 #if !UCONFIG_NO_FORMATTING
00025
00026 #include "unicode/ucal.h"
00027 #include "unicode/smpdtfmt.h"
00028 #include "unicode/dtintrv.h"
00029 #include "unicode/dtitvinf.h"
00030 #include "unicode/dtptngen.h"
00031
00032 U_NAMESPACE_BEGIN
00033
00034
00035
00222 class U_I18N_API DateIntervalFormat : public Format {
00223 public:
00224
00238 static DateIntervalFormat* U_EXPORT2 createInstance(
00239 const UnicodeString& skeleton,
00240 UErrorCode& status);
00241
00276 static DateIntervalFormat* U_EXPORT2 createInstance(
00277 const UnicodeString& skeleton,
00278 const Locale& locale,
00279 UErrorCode& status);
00280
00296 static DateIntervalFormat* U_EXPORT2 createInstance(
00297 const UnicodeString& skeleton,
00298 const DateIntervalInfo& dtitvinf,
00299 UErrorCode& status);
00300
00341 static DateIntervalFormat* U_EXPORT2 createInstance(
00342 const UnicodeString& skeleton,
00343 const Locale& locale,
00344 const DateIntervalInfo& dtitvinf,
00345 UErrorCode& status);
00346
00351 virtual ~DateIntervalFormat();
00352
00359 virtual Format* clone(void) const;
00360
00368 virtual UBool operator==(const Format& other) const;
00369
00377 UBool operator!=(const Format& other) const;
00378
00379
00380 using Format::format;
00381
00401 virtual UnicodeString& format(const Formattable& obj,
00402 UnicodeString& appendTo,
00403 FieldPosition& fieldPosition,
00404 UErrorCode& status) const ;
00405
00406
00407
00423 UnicodeString& format(const DateInterval* dtInterval,
00424 UnicodeString& appendTo,
00425 FieldPosition& fieldPosition,
00426 UErrorCode& status) const ;
00427
00428
00452 UnicodeString& format(Calendar& fromCalendar,
00453 Calendar& toCalendar,
00454 UnicodeString& appendTo,
00455 FieldPosition& fieldPosition,
00456 UErrorCode& status) const ;
00457
00484 virtual void parseObject(const UnicodeString& source,
00485 Formattable& result,
00486 ParsePosition& parse_pos) const;
00487
00488
00495 const DateIntervalInfo* getDateIntervalInfo(void) const;
00496
00497
00504 void setDateIntervalInfo(const DateIntervalInfo& newIntervalPatterns,
00505 UErrorCode& status);
00506
00507
00519 const DateFormat* getDateFormat(void) const;
00520
00526 virtual const TimeZone& getTimeZone(void) const;
00527
00534 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00535
00541 virtual void setTimeZone(const TimeZone& zone);
00542
00554 static UClassID U_EXPORT2 getStaticClassID(void);
00555
00567 virtual UClassID getDynamicClassID(void) const;
00568
00569 protected:
00570
00575 DateIntervalFormat(const DateIntervalFormat&);
00576
00581 DateIntervalFormat& operator=(const DateIntervalFormat&);
00582
00583 private:
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598 struct PatternInfo {
00599 UnicodeString firstPart;
00600 UnicodeString secondPart;
00614 UBool laterDateFirst;
00615 };
00616
00617
00622 DateIntervalFormat();
00623
00642 DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo,
00643 const UnicodeString* skeleton, UErrorCode& status);
00644
00645
00658 static DateIntervalFormat* U_EXPORT2 create(const Locale& locale,
00659 DateIntervalInfo* dtitvinf,
00660 const UnicodeString* skeleton,
00661 UErrorCode& status);
00662
00683 static void
00684 adjustPosition(UnicodeString& combiningPattern,
00685 UnicodeString& pat0, FieldPosition& pos0,
00686 UnicodeString& pat1, FieldPosition& pos1,
00687 FieldPosition& posResult);
00688
00689
00712 UnicodeString& fallbackFormat(Calendar& fromCalendar,
00713 Calendar& toCalendar,
00714 UBool fromToOnSameDay,
00715 UnicodeString& appendTo,
00716 FieldPosition& pos,
00717 UErrorCode& status) const;
00718
00719
00720
00755 void initializePattern(UErrorCode& status);
00756
00757
00758
00766 void setFallbackPattern(UCalendarDateFields field,
00767 const UnicodeString& skeleton,
00768 UErrorCode& status);
00769
00770
00771
00796 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton,
00797 UnicodeString& date,
00798 UnicodeString& normalizedDate,
00799 UnicodeString& time,
00800 UnicodeString& normalizedTime);
00801
00802
00803
00827 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
00828 const UnicodeString& timeSkeleton);
00829
00830
00831
00832
00856 UBool setIntervalPattern(UCalendarDateFields field,
00857 const UnicodeString* skeleton,
00858 const UnicodeString* bestSkeleton,
00859 int8_t differenceInfo,
00860 UnicodeString* extendedSkeleton = NULL,
00861 UnicodeString* extendedBestSkeleton = NULL);
00862
00891 static void U_EXPORT2 adjustFieldWidth(
00892 const UnicodeString& inputSkeleton,
00893 const UnicodeString& bestMatchSkeleton,
00894 const UnicodeString& bestMatchIntervalPattern,
00895 int8_t differenceInfo,
00896 UnicodeString& adjustedIntervalPattern);
00897
00909 void concatSingleDate2TimeInterval(UnicodeString& format,
00910 const UnicodeString& datePattern,
00911 UCalendarDateFields field,
00912 UErrorCode& status);
00913
00920 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field,
00921 const UnicodeString& skeleton);
00922
00923
00929 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern);
00930
00931
00937 void setIntervalPattern(UCalendarDateFields field,
00938 const UnicodeString& intervalPattern);
00939
00940
00947 void setIntervalPattern(UCalendarDateFields field,
00948 const UnicodeString& intervalPattern,
00949 UBool laterDateFirst);
00950
00951
00961 void setPatternInfo(UCalendarDateFields field,
00962 const UnicodeString* firstPart,
00963 const UnicodeString* secondPart,
00964 UBool laterDateFirst);
00965
00991 UnicodeString& formatImpl(Calendar& fromCalendar,
00992 Calendar& toCalendar,
00993 UnicodeString& appendTo,
00994 FieldPosition& fieldPosition,
00995 UErrorCode& status) const ;
00996
00997
00998
00999 static const char16_t fgCalendarFieldToPatternLetter[];
01000
01001
01005 DateIntervalInfo* fInfo;
01006
01010 SimpleDateFormat* fDateFormat;
01011
01017 Calendar* fFromCalendar;
01018 Calendar* fToCalendar;
01019
01020 Locale fLocale;
01021
01025 UnicodeString fSkeleton;
01026 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX];
01027
01031 UnicodeString* fDatePattern;
01032 UnicodeString* fTimePattern;
01033 UnicodeString* fDateTimeFormat;
01034 };
01035
01036 inline UBool
01037 DateIntervalFormat::operator!=(const Format& other) const {
01038 return !operator==(other);
01039 }
01040
01041 U_NAMESPACE_END
01042
01043 #endif
01044
01045 #endif // _DTITVFMT_H__
01046