dtitvfmt.h

Go to the documentation of this file.
00001 /********************************************************************************
00002 * Copyright (C) 2008, International Business Machines Corporation and others. All Rights Reserved.
00003 *******************************************************************************
00004 *
00005 * File DTITVFMT.H
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      * This is for ICU internal use only. Please do not use.
00532      * Save the interval pattern information.
00533      * Interval pattern consists of 2 single date patterns and the separator.
00534      * For example, interval pattern "MMM d - MMM d, yyyy" consists
00535      * a single date pattern "MMM d", another single date pattern "MMM d, yyyy",
00536      * and a separator "-".
00537      * The pattern is divided into 2 parts. For above example,
00538      * the first part is "MMM d - ", and the second part is "MMM d, yyyy".
00539      * Also, the first date appears in an interval pattern could be 
00540      * the earlier date or the later date.
00541      * And such information is saved in the interval pattern as well.
00542      * @internal ICU 4.0
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     // from calendar field to pattern letter
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 /* #if !UCONFIG_NO_FORMATTING */
00947 
00948 #endif // _DTITVFMT_H__
00949 //eof

Generated on Sun Aug 22 15:43:58 2010 for ICU 4.0.1 by  doxygen 1.3.9.1