ICU 52.1  52.1
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 
19 #include "unicode/format.h"
20 #include "unicode/timezone.h"
21 #include "unicode/tznames.h"
22 
29 typedef enum UTimeZoneFormatStyle {
60 #ifndef U_HIDE_DRAFT_API
61 
152 #endif /* U_HIDE_DRAFT_API */
154 
180 #ifndef U_HIDE_DRAFT_API
181 
191 #endif /* U_HIDE_DRAFT_API */
192 
199 
222 
241 
243 
245 
246 class TimeZoneGenericNames;
247 class UVector;
248 
265 public:
270  TimeZoneFormat(const TimeZoneFormat& other);
271 
276  virtual ~TimeZoneFormat();
277 
282  TimeZoneFormat& operator=(const TimeZoneFormat& other);
283 
292  virtual UBool operator==(const Format& other) const;
293 
300  virtual Format* clone() const;
301 
310  static TimeZoneFormat* U_EXPORT2 createInstance(const Locale& locale, UErrorCode& status);
311 
317  const TimeZoneNames* getTimeZoneNames() const;
318 
326  void adoptTimeZoneNames(TimeZoneNames *tznames);
327 
333  void setTimeZoneNames(const TimeZoneNames &tznames);
334 
342  UnicodeString& getGMTPattern(UnicodeString& pattern) const;
343 
352  void setGMTPattern(const UnicodeString& pattern, UErrorCode& status);
353 
362  UnicodeString& getGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, UnicodeString& pattern) const;
363 
372  void setGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, const UnicodeString& pattern, UErrorCode& status);
373 
383  UnicodeString& getGMTOffsetDigits(UnicodeString& digits) const;
384 
397  void setGMTOffsetDigits(const UnicodeString& digits, UErrorCode& status);
398 
406  UnicodeString& getGMTZeroFormat(UnicodeString& gmtZeroFormat) const;
407 
415  void setGMTZeroFormat(const UnicodeString& gmtZeroFormat, UErrorCode& status);
416 
424  uint32_t getDefaultParseOptions(void) const;
425 
434  void setDefaultParseOptions(uint32_t flags);
435 
436 #ifndef U_HIDE_DRAFT_API
437 
452  UnicodeString& formatOffsetISO8601Basic(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds,
453  UnicodeString& result, UErrorCode& status) const;
454 
470  UnicodeString& formatOffsetISO8601Extended(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds,
471  UnicodeString& result, UErrorCode& status) const;
472 #endif /* U_HIDE_DRAFT_API */
473 
493  UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const;
494 
495 #ifndef U_HIDE_DRAFT_API
496 
515  UnicodeString& formatOffsetShortLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const;
516 #endif /* U_HIDE_DRAFT_API */
517 
518  using Format::format;
519 
533  virtual UnicodeString& format(UTimeZoneFormatStyle style, const TimeZone& tz, UDate date,
534  UnicodeString& name, UTimeZoneFormatTimeType* timeType = NULL) const;
535 
550  int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos) const;
551 
564  int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const;
565 
566 #ifndef U_HIDE_DRAFT_API
567 
579  int32_t parseOffsetShortLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const;
580 #endif /* U_HIDE_DRAFT_API */
581 
598  virtual TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos,
599  int32_t parseOptions, UTimeZoneFormatTimeType* timeType = NULL) const;
600 
616  TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos,
617  UTimeZoneFormatTimeType* timeType = NULL) const;
618 
619  /* ----------------------------------------------
620  * Format APIs
621  * ---------------------------------------------- */
622 
634  virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo,
635  FieldPosition& pos, UErrorCode& status) const;
636 
649  virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const;
650 
655  static UClassID U_EXPORT2 getStaticClassID(void);
656 
661  virtual UClassID getDynamicClassID() const;
662 
663 protected:
670  TimeZoneFormat(const Locale& locale, UErrorCode& status);
671 
672 private:
673  /* Locale of this object */
674  Locale fLocale;
675 
676  /* Stores the region (could be implicit default) */
677  char fTargetRegion[ULOC_COUNTRY_CAPACITY];
678 
679  /* TimeZoneNames object used by this formatter */
680  TimeZoneNames* fTimeZoneNames;
681 
682  /* TimeZoneGenericNames object used by this formatter - lazily instantiated */
683  TimeZoneGenericNames* fTimeZoneGenericNames;
684 
685  /* Localized GMT format pattern - e.g. "GMT{0}" */
686  UnicodeString fGMTPattern;
687 
688  /* Array of offset patterns used by Localized GMT format - e.g. "+HH:mm" */
689  UnicodeString fGMTOffsetPatterns[UTZFMT_PAT_COUNT];
690 
691  /* Localized decimal digits used by Localized GMT format */
692  UChar32 fGMTOffsetDigits[10];
693 
694  /* Localized GMT zero format - e.g. "GMT" */
695  UnicodeString fGMTZeroFormat;
696 
697  /* Bit flags representing parse options */
698  uint32_t fDefParseOptionFlags;
699 
700  /* Constant parts of GMT format pattern, populated from localized GMT format pattern*/
701  UnicodeString fGMTPatternPrefix; /* Substring before {0} */
702  UnicodeString fGMTPatternSuffix; /* Substring after {0} */
703 
704  /* Compiled offset patterns generated from fGMTOffsetPatterns[] */
705  UVector* fGMTOffsetPatternItems[UTZFMT_PAT_COUNT];
706 
707  UBool fAbuttingOffsetHoursAndMinutes;
708 
719  UnicodeString& formatSpecific(const TimeZone& tz, UTimeZoneNameType stdType, UTimeZoneNameType dstType,
720  UDate date, UnicodeString& name, UTimeZoneFormatTimeType *timeType) const;
721 
730  UnicodeString& formatGeneric(const TimeZone& tz, int32_t genType, UDate date, UnicodeString& name) const;
731 
737  const TimeZoneGenericNames* getTimeZoneGenericNames(UErrorCode& status) const;
738 
746  UnicodeString& formatExemplarLocation(const TimeZone& tz, UnicodeString& name) const;
747 
751  enum OffsetFields {
752  FIELDS_H,
753  FIELDS_HM,
754  FIELDS_HMS
755  };
756 
764  void initGMTPattern(const UnicodeString& gmtPattern, UErrorCode& status);
765 
774  static UVector* parseOffsetPattern(const UnicodeString& pattern, OffsetFields required, UErrorCode& status);
775 
784  static UnicodeString& expandOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status);
785 
794  static UnicodeString& truncateOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status);
795 
806  static UBool toCodePoints(const UnicodeString& str, UChar32* codeArray, int32_t capacity);
807 
818  UnicodeString& formatOffsetISO8601(int32_t offset, UBool isBasic, UBool useUtcIndicator,
819  UBool isShort, UBool ignoreSeconds, UnicodeString& result, UErrorCode& status) const;
820 
828  UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UBool isShort, UnicodeString& result, UErrorCode& status) const;
829 
844  int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos, UBool extendedOnly,
845  UBool* hasDigitOffset = NULL) const;
846 
854  void appendOffsetDigits(UnicodeString& buf, int32_t n, uint8_t minDigits) const;
855 
868  int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos,
869  UBool isShort, UBool* hasDigitOffset) const;
870 
880  int32_t parseOffsetLocalizedGMTPattern(const UnicodeString& text, int32_t start,
881  UBool isShort, int32_t& parsedLen) const;
882 
891  int32_t parseOffsetFields(const UnicodeString& text, int32_t start, UBool isShort, int32_t& parsedLen) const;
892 
904  int32_t parseOffsetFieldsWithPattern(const UnicodeString& text, int32_t start,
905  UVector* patternItems, UBool forceSingleHourDigit, int32_t& hour, int32_t& min, int32_t& sec) const;
906 
914  int32_t parseAbuttingOffsetFields(const UnicodeString& text, int32_t start, int32_t& parsedLen) const;
915 
923  int32_t parseOffsetDefaultLocalizedGMT(const UnicodeString& text, int start, int32_t& parsedLen) const;
924 
933  int32_t parseDefaultOffsetFields(const UnicodeString& text, int32_t start, UChar separator,
934  int32_t& parsedLen) const;
935 
950  int32_t parseOffsetFieldWithLocalizedDigits(const UnicodeString& text, int32_t start,
951  uint8_t minDigits, uint8_t maxDigits, uint16_t minVal, uint16_t maxVal, int32_t& parsedLen) const;
952 
962  int32_t parseSingleLocalizedDigit(const UnicodeString& text, int32_t start, int32_t& len) const;
963 
973  static UnicodeString& formatOffsetWithAsciiDigits(int32_t offset, UChar sep,
974  OffsetFields minFields, OffsetFields maxFields, UnicodeString& result);
975 
988  static int32_t parseAbuttingAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos,
989  OffsetFields minFields, OffsetFields maxFields, UBool fixedHourWidth);
990 
1003  static int32_t parseAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos, UChar sep,
1004  OffsetFields minFields, OffsetFields maxFields);
1005 
1012  static UnicodeString& unquote(const UnicodeString& pattern, UnicodeString& result);
1013 
1019  void initGMTOffsetPatterns(UErrorCode& status);
1020 
1027  void checkAbuttingHoursAndMinutes();
1028 
1034  TimeZone* createTimeZoneForOffset(int32_t offset) const;
1035 
1041  static UTimeZoneFormatTimeType getTimeType(UTimeZoneNameType nameType);
1042 
1051  UnicodeString& getTimeZoneID(const TimeZoneNames::MatchInfoCollection* matches, int32_t idx, UnicodeString& tzID) const;
1052 
1053 
1061  UnicodeString& parseZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1062 
1070  UnicodeString& parseShortZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1071 
1079  UnicodeString& parseExemplarLocation(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1080 };
1081 
1083 
1084 #endif /* !UCONFIG_NO_FORMATTING */
1085 #endif