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
00503 static UClassID U_EXPORT2 getStaticClassID(void);
00504
00516 virtual UClassID getDynamicClassID(void) const;
00517
00518 protected:
00519
00524 DateIntervalFormat(const DateIntervalFormat&);
00525
00530 DateIntervalFormat& operator=(const DateIntervalFormat&);
00531
00532 private:
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548 struct PatternInfo {
00549 UnicodeString firstPart;
00550 UnicodeString secondPart;
00564 UBool laterDateFirst;
00565 };
00566
00567
00572 DateIntervalFormat();
00573
00593 DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo,
00594 const UnicodeString* skeleton, UErrorCode& status);
00595
00596
00610 static DateIntervalFormat* U_EXPORT2 create(const Locale& locale,
00611 DateIntervalInfo* dtitvinf,
00612 const UnicodeString* skeleton,
00613 UErrorCode& status);
00614
00628 static SimpleDateFormat* U_EXPORT2 createSDFPatternInstance(
00629 const UnicodeString& skeleton,
00630 const Locale& locale,
00631 DateTimePatternGenerator* dtpng,
00632 UErrorCode& status);
00633
00634
00658 UnicodeString& fallbackFormat(Calendar& fromCalendar,
00659 Calendar& toCalendar,
00660 UnicodeString& appendTo,
00661 FieldPosition& pos,
00662 UErrorCode& status) const;
00663
00664
00665
00701 void initializePattern(UErrorCode& status);
00702
00703
00704
00713 void setFallbackPattern(UCalendarDateFields field,
00714 const UnicodeString& skeleton,
00715 UErrorCode& status);
00716
00717
00718
00744 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton,
00745 UnicodeString& date,
00746 UnicodeString& normalizedDate,
00747 UnicodeString& time,
00748 UnicodeString& normalizedTime);
00749
00750
00751
00776 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
00777 const UnicodeString& timeSkeleton);
00778
00779
00780
00781
00806 UBool setIntervalPattern(UCalendarDateFields field,
00807 const UnicodeString* skeleton,
00808 const UnicodeString* bestSkeleton,
00809 int8_t differenceInfo,
00810 UnicodeString* extendedSkeleton = NULL,
00811 UnicodeString* extendedBestSkeleton = NULL);
00812
00842 static void U_EXPORT2 adjustFieldWidth(
00843 const UnicodeString& inputSkeleton,
00844 const UnicodeString& bestMatchSkeleton,
00845 const UnicodeString& bestMatchIntervalPattern,
00846 int8_t differenceInfo,
00847 UnicodeString& adjustedIntervalPattern);
00848
00862 void concatSingleDate2TimeInterval(const UChar* format,
00863 int32_t formatLen,
00864 const UnicodeString& datePattern,
00865 UCalendarDateFields field,
00866 UErrorCode& status);
00867
00875 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field,
00876 const UnicodeString& skeleton);
00877
00878
00885 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern);
00886
00887
00894 void setIntervalPattern(UCalendarDateFields field,
00895 const UnicodeString& intervalPattern);
00896
00897
00905 void setIntervalPattern(UCalendarDateFields field,
00906 const UnicodeString& intervalPattern,
00907 UBool laterDateFirst);
00908
00909
00920 void setPatternInfo(UCalendarDateFields field,
00921 const UnicodeString* firstPart,
00922 const UnicodeString* secondpart,
00923 UBool laterDateFirst);
00924
00925
00926
00927 static const UChar fgCalendarFieldToPatternLetter[];
00928
00929
00933 DateIntervalInfo* fInfo;
00934
00938 SimpleDateFormat* fDateFormat;
00939
00945 Calendar* fFromCalendar;
00946 Calendar* fToCalendar;
00947
00951 DateTimePatternGenerator* fDtpng;
00952
00956 UnicodeString fSkeleton;
00957 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX];
00958 };
00959
00960 inline UBool
00961 DateIntervalFormat::operator!=(const Format& other) const {
00962 return !operator==(other);
00963 }
00964
00965 U_NAMESPACE_END
00966
00967 #endif
00968
00969 #endif // _DTITVFMT_H__
00970