ICU 4.8.1.1  4.8.1.1
dtitvfmt.h
Go to the documentation of this file.
00001 /********************************************************************************
00002 * Copyright (C) 2008-2011, International Business Machines Corporation and
00003 * others. All Rights Reserved.
00004 *******************************************************************************
00005 *
00006 * File DTITVFMT.H
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      * This is for ICU internal use only. Please do not use.
00558      * Save the interval pattern information.
00559      * Interval pattern consists of 2 single date patterns and the separator.
00560      * For example, interval pattern "MMM d - MMM d, yyyy" consists
00561      * a single date pattern "MMM d", another single date pattern "MMM d, yyyy",
00562      * and a separator "-".
00563      * The pattern is divided into 2 parts. For above example,
00564      * the first part is "MMM d - ", and the second part is "MMM d, yyyy".
00565      * Also, the first date appears in an interval pattern could be
00566      * the earlier date or the later date.
00567      * And such information is saved in the interval pattern as well.
00568      * @internal ICU 4.0
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     // from calendar field to pattern letter
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 /* #if !UCONFIG_NO_FORMATTING */
00990 
00991 #endif // _DTITVFMT_H__
00992 //eof
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines