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
00028 U_NAMESPACE_BEGIN
00029
00030
00031
00217 class U_I18N_API DateIntervalFormat : public Format {
00218 public:
00219
00233 static DateIntervalFormat* U_EXPORT2 createInstance(
00234 const UnicodeString& skeleton,
00235 UErrorCode& status);
00236
00266 static DateIntervalFormat* U_EXPORT2 createInstance(
00267 const UnicodeString& skeleton,
00268 const Locale& locale,
00269 UErrorCode& status);
00270
00286 static DateIntervalFormat* U_EXPORT2 createInstance(
00287 const UnicodeString& skeleton,
00288 const DateIntervalInfo& dtitvinf,
00289 UErrorCode& status);
00290
00326 static DateIntervalFormat* U_EXPORT2 createInstance(
00327 const UnicodeString& skeleton,
00328 const Locale& locale,
00329 const DateIntervalInfo& dtitvinf,
00330 UErrorCode& status);
00331
00336 virtual ~DateIntervalFormat();
00337
00344 virtual Format* clone(void) const;
00345
00353 virtual UBool operator==(const Format& other) const;
00354
00362 UBool operator!=(const Format& other) const;
00363
00380 virtual UnicodeString& format(const Formattable& obj,
00381 UnicodeString& appendTo,
00382 FieldPosition& fieldPosition,
00383 UErrorCode& status) const ;
00384
00385
00386
00399 UnicodeString& format(const DateInterval* dtInterval,
00400 UnicodeString& appendTo,
00401 FieldPosition& fieldPosition,
00402 UErrorCode& status) const ;
00403
00404
00425 UnicodeString& format(Calendar& fromCalendar,
00426 Calendar& toCalendar,
00427 UnicodeString& appendTo,
00428 FieldPosition& fieldPosition,
00429 UErrorCode& status) const ;
00430
00457 virtual void parseObject(const UnicodeString& source,
00458 Formattable& result,
00459 ParsePosition& parse_pos) const;
00460
00461
00468 const DateIntervalInfo* getDateIntervalInfo(void) const;
00469
00470
00477 void setDateIntervalInfo(const DateIntervalInfo& newIntervalPatterns,
00478 UErrorCode& status);
00479
00480
00486 const DateFormat* getDateFormat(void) const;
00487
00499 static UClassID U_EXPORT2 getStaticClassID(void);
00500
00512 virtual UClassID getDynamicClassID(void) const;
00513
00514 protected:
00515
00520 DateIntervalFormat(const DateIntervalFormat&);
00521
00526 DateIntervalFormat& operator=(const DateIntervalFormat&);
00527
00528 private:
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544 struct PatternInfo {
00545 UnicodeString firstPart;
00546 UnicodeString secondPart;
00560 UBool laterDateFirst;
00561 };
00562
00563
00568 DateIntervalFormat();
00569
00589 DateIntervalFormat(DateFormat* dtfmt, DateIntervalInfo* dtItvInfo,
00590 const UnicodeString* skeleton, UErrorCode& status);
00591
00592
00606 static DateIntervalFormat* U_EXPORT2 create(DateFormat* dtfmt,
00607 DateIntervalInfo* dtitvinf,
00608 const UnicodeString* skeleton,
00609 UErrorCode& status);
00610
00611
00635 UnicodeString& fallbackFormat(Calendar& fromCalendar,
00636 Calendar& toCalendar,
00637 UnicodeString& appendTo,
00638 FieldPosition& pos,
00639 UErrorCode& status) const;
00640
00641
00642
00678 void initializePattern(UErrorCode& status);
00679
00680
00681
00691 void setFallbackPattern(UCalendarDateFields field,
00692 const UnicodeString& skeleton,
00693 DateTimePatternGenerator* dtpng,
00694 UErrorCode& status);
00695
00696
00697
00723 static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton,
00724 UnicodeString& date,
00725 UnicodeString& normalizedDate,
00726 UnicodeString& time,
00727 UnicodeString& normalizedTime);
00728
00729
00730
00755 UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
00756 const UnicodeString& timeSkeleton);
00757
00758
00759
00760
00785 UBool setIntervalPattern(UCalendarDateFields field,
00786 const UnicodeString* skeleton,
00787 const UnicodeString* bestSkeleton,
00788 int8_t differenceInfo,
00789 UnicodeString* extendedSkeleton = NULL,
00790 UnicodeString* extendedBestSkeleton = NULL);
00791
00821 static void U_EXPORT2 adjustFieldWidth(
00822 const UnicodeString& inputSkeleton,
00823 const UnicodeString& bestMatchSkeleton,
00824 const UnicodeString& bestMatchIntervalPattern,
00825 int8_t differenceInfo,
00826 UnicodeString& adjustedIntervalPattern);
00827
00841 void concatSingleDate2TimeInterval(const UChar* format,
00842 int32_t formatLen,
00843 const UnicodeString& datePattern,
00844 UCalendarDateFields field,
00845 UErrorCode& status);
00846
00854 static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field,
00855 const UnicodeString& skeleton);
00856
00857
00864 static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern);
00865
00866
00873 void setIntervalPattern(UCalendarDateFields field,
00874 const UnicodeString& intervalPattern);
00875
00876
00884 void setIntervalPattern(UCalendarDateFields field,
00885 const UnicodeString& intervalPattern,
00886 UBool laterDateFirst);
00887
00888
00899 void setPatternInfo(UCalendarDateFields field,
00900 const UnicodeString* firstPart,
00901 const UnicodeString* secondpart,
00902 UBool laterDateFirst);
00903
00904
00905
00906 static const UChar fgCalendarFieldToPatternLetter[];
00907
00908
00912 DateIntervalInfo* fInfo;
00913
00917 SimpleDateFormat* fDateFormat;
00918
00924 Calendar* fFromCalendar;
00925 Calendar* fToCalendar;
00926
00930 UnicodeString fSkeleton;
00931 PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX];
00932 };
00933
00934
00935
00936
00937
00938
00939 inline UBool
00940 DateIntervalFormat::operator!=(const Format& other) const {
00941 return !operator==(other);
00942 }
00943
00944 U_NAMESPACE_END
00945
00946 #endif
00947
00948 #endif // _DTITVFMT_H__
00949