ICU 51.2  51.2
tzfmt.h
Go to the documentation of this file.
1 /*
2 *******************************************************************************
3 * Copyright (C) 2011-2013, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
6 */
7 #ifndef __TZFMT_H
8 #define __TZFMT_H
9 
15 #include "unicode/utypes.h"
16 
17 #if !UCONFIG_NO_FORMATTING
18 #ifndef U_HIDE_DRAFT_API
19 
20 #include "unicode/format.h"
21 #include "unicode/timezone.h"
22 #include "unicode/tznames.h"
23 
30 typedef enum UTimeZoneFormatStyle {
61 #ifndef U_HIDE_DRAFT_API
62 
153 #endif /* U_HIDE_DRAFT_API */
155 
181 #ifndef U_HIDE_DRAFT_API
182 
192 #endif /* U_HIDE_DRAFT_API */
193 
194 #ifndef U_HIDE_INTERNAL_API
195 
200 #endif /* U_HIDE_INTERNAL_API */
202 
225 
244 
246 
248 
249 class TimeZoneGenericNames;
250 class UVector;
251 
268 public:
273  TimeZoneFormat(const TimeZoneFormat& other);
274 
279  virtual ~TimeZoneFormat();
280 
285  TimeZoneFormat& operator=(const TimeZoneFormat& other);
286 
295  virtual UBool operator==(const Format& other) const;
296 
303  virtual Format* clone() const;
304 
313  static TimeZoneFormat* U_EXPORT2 createInstance(const Locale& locale, UErrorCode& status);
314 
320  const TimeZoneNames* getTimeZoneNames() const;
321 
329  void adoptTimeZoneNames(TimeZoneNames *tznames);
330 
336  void setTimeZoneNames(const TimeZoneNames &tznames);
337 
345  UnicodeString& getGMTPattern(UnicodeString& pattern) const;
346 
355  void setGMTPattern(const UnicodeString& pattern, UErrorCode& status);
356 
365  UnicodeString& getGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, UnicodeString& pattern) const;
366 
375  void setGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, const UnicodeString& pattern, UErrorCode& status);
376 
386  UnicodeString& getGMTOffsetDigits(UnicodeString& digits) const;
387 
400  void setGMTOffsetDigits(const UnicodeString& digits, UErrorCode& status);
401 
409  UnicodeString& getGMTZeroFormat(UnicodeString& gmtZeroFormat) const;
410 
418  void setGMTZeroFormat(const UnicodeString& gmtZeroFormat, UErrorCode& status);
419 
427  uint32_t getDefaultParseOptions(void) const;
428 
437  void setDefaultParseOptions(uint32_t flags);
438 
439 #ifndef U_HIDE_DRAFT_API
440 
455  UnicodeString& formatOffsetISO8601Basic(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds,
456  UnicodeString& result, UErrorCode& status) const;
457 
473  UnicodeString& formatOffsetISO8601Extended(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds,
474  UnicodeString& result, UErrorCode& status) const;
475 #endif /* U_HIDE_DRAFT_API */
476 
496  UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const;
497 
498 #ifndef U_HIDE_DRAFT_API
499 
518  UnicodeString& formatOffsetShortLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const;
519 #endif /* U_HIDE_DRAFT_API */
520 
521  using Format::format;
522 
536  virtual UnicodeString& format(UTimeZoneFormatStyle style, const TimeZone& tz, UDate date,
537  UnicodeString& name, UTimeZoneFormatTimeType* timeType = NULL) const;
538 
553  int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos) const;
554 
567  int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const;
568 
569 #ifndef U_HIDE_DRAFT_API
570 
582  int32_t parseOffsetShortLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const;
583 #endif /* U_HIDE_DRAFT_API */
584 
601  virtual TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos,
602  int32_t parseOptions, UTimeZoneFormatTimeType* timeType = NULL) const;
603 
619  TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos,
620  UTimeZoneFormatTimeType* timeType = NULL) const;
621 
622  /* ----------------------------------------------
623  * Format APIs
624  * ---------------------------------------------- */
625 
637  virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo,
638  FieldPosition& pos, UErrorCode& status) const;
639 
652  virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const;
653 
658  static UClassID U_EXPORT2 getStaticClassID(void);
659 
664  virtual UClassID getDynamicClassID() const;
665 
666 protected:
673  TimeZoneFormat(const Locale& locale, UErrorCode& status);
674 
675 private:
676  /* Locale of this object */
677  Locale fLocale;
678 
679  /* Stores the region (could be implicit default) */
680  char fTargetRegion[ULOC_COUNTRY_CAPACITY];
681 
682  /* TimeZoneNames object used by this formatter */
683  TimeZoneNames* fTimeZoneNames;
684 
685  /* TimeZoneGenericNames object used by this formatter - lazily instantiated */
686  TimeZoneGenericNames* fTimeZoneGenericNames;
687 
688  /* Localized GMT format pattern - e.g. "GMT{0}" */
689  UnicodeString fGMTPattern;
690 
691  /* Array of offset patterns used by Localized GMT format - e.g. "+HH:mm" */
692  UnicodeString fGMTOffsetPatterns[UTZFMT_PAT_COUNT];
693 
694  /* Localized decimal digits used by Localized GMT format */
695  UChar32 fGMTOffsetDigits[10];
696 
697  /* Localized GMT zero format - e.g. "GMT" */
698  UnicodeString fGMTZeroFormat;
699 
700  /* Bit flags representing parse options */
701  uint32_t fDefParseOptionFlags;
702 
703  /* Constant parts of GMT format pattern, populated from localized GMT format pattern*/
704  UnicodeString fGMTPatternPrefix; /* Substring before {0} */
705  UnicodeString fGMTPatternSuffix; /* Substring after {0} */
706 
707  /* Compiled offset patterns generated from fGMTOffsetPatterns[] */
708  UVector* fGMTOffsetPatternItems[UTZFMT_PAT_COUNT];
709 
710  UBool fAbuttingOffsetHoursAndMinutes;
711 
722  UnicodeString& formatSpecific(const TimeZone& tz, UTimeZoneNameType stdType, UTimeZoneNameType dstType,
723  UDate date, UnicodeString& name, UTimeZoneFormatTimeType *timeType) const;
724 
733  UnicodeString& formatGeneric(const TimeZone& tz, int32_t genType, UDate date, UnicodeString& name) const;
734 
740  const TimeZoneGenericNames* getTimeZoneGenericNames(UErrorCode& status) const;
741 
749  UnicodeString& formatExemplarLocation(const TimeZone& tz, UnicodeString& name) const;
750 
754  enum OffsetFields {
755  FIELDS_H,
756  FIELDS_HM,
757  FIELDS_HMS
758  };
759 
767  void initGMTPattern(const UnicodeString& gmtPattern, UErrorCode& status);
768 
777  static UVector* parseOffsetPattern(const UnicodeString& pattern, OffsetFields required, UErrorCode& status);
778 
787  static UnicodeString& expandOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status);
788 
797  static UnicodeString& truncateOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status);
798 
809  static UBool toCodePoints(const UnicodeString& str, UChar32* codeArray, int32_t capacity);
810 
821  UnicodeString& formatOffsetISO8601(int32_t offset, UBool isBasic, UBool useUtcIndicator,
822  UBool isShort, UBool ignoreSeconds, UnicodeString& result, UErrorCode& status) const;
823 
831  UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UBool isShort, UnicodeString& result, UErrorCode& status) const;
832 
847  int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos, UBool extendedOnly,
848  UBool* hasDigitOffset = NULL) const;
849 
857  void appendOffsetDigits(UnicodeString& buf, int32_t n, uint8_t minDigits) const;
858 
871  int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos,
872  UBool isShort, UBool* hasDigitOffset) const;
873 
883  int32_t parseOffsetLocalizedGMTPattern(const UnicodeString& text, int32_t start,
884  UBool isShort, int32_t& parsedLen) const;
885 
894  int32_t parseOffsetFields(const UnicodeString& text, int32_t start, UBool isShort, int32_t& parsedLen) const;
895 
907  int32_t parseOffsetFieldsWithPattern(const UnicodeString& text, int32_t start,
908  UVector* patternItems, UBool forceSingleHourDigit, int32_t& hour, int32_t& min, int32_t& sec) const;
909 
917  int32_t parseAbuttingOffsetFields(const UnicodeString& text, int32_t start, int32_t& parsedLen) const;
918 
926  int32_t parseOffsetDefaultLocalizedGMT(const UnicodeString& text, int start, int32_t& parsedLen) const;
927 
936  int32_t parseDefaultOffsetFields(const UnicodeString& text, int32_t start, UChar separator,
937  int32_t& parsedLen) const;
938 
953  int32_t parseOffsetFieldWithLocalizedDigits(const UnicodeString& text, int32_t start,
954  uint8_t minDigits, uint8_t maxDigits, uint16_t minVal, uint16_t maxVal, int32_t& parsedLen) const;
955 
965  int32_t parseSingleLocalizedDigit(const UnicodeString& text, int32_t start, int32_t& len) const;
966 
976  static UnicodeString& formatOffsetWithAsciiDigits(int32_t offset, UChar sep,
977  OffsetFields minFields, OffsetFields maxFields, UnicodeString& result);
978 
991  static int32_t parseAbuttingAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos,
992  OffsetFields minFields, OffsetFields maxFields, UBool fixedHourWidth);
993 
1006  static int32_t parseAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos, UChar sep,
1007  OffsetFields minFields, OffsetFields maxFields);
1008 
1015  static UnicodeString& unquote(const UnicodeString& pattern, UnicodeString& result);
1016 
1022  void initGMTOffsetPatterns(UErrorCode& status);
1023 
1030  void checkAbuttingHoursAndMinutes();
1031 
1037  TimeZone* createTimeZoneForOffset(int32_t offset) const;
1038 
1044  static UTimeZoneFormatTimeType getTimeType(UTimeZoneNameType nameType);
1045 
1054  UnicodeString& getTimeZoneID(const TimeZoneNames::MatchInfoCollection* matches, int32_t idx, UnicodeString& tzID) const;
1055 
1056 
1064  UnicodeString& parseZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1065 
1073  UnicodeString& parseShortZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1074 
1082  UnicodeString& parseExemplarLocation(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1083 };
1084 
1086 
1087 #endif /* ndef U_HIDE_DRAFT_API */
1088 #endif /* !UCONFIG_NO_FORMATTING */
1089 #endif
1090