ICU 53.1  53.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
tzfmt.h
Go to the documentation of this file.
1 /*
2 *******************************************************************************
3 * Copyright (C) 2011-2014, 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 {
152 
188 
189  /* The following cannot be #ifndef U_HIDE_INTERNAL_API, needed for other .h declarations */
196 
219 
238 
240 
242 
243 class TimeZoneGenericNames;
244 class UVector;
245 
262 public:
267  TimeZoneFormat(const TimeZoneFormat& other);
268 
273  virtual ~TimeZoneFormat();
274 
279  TimeZoneFormat& operator=(const TimeZoneFormat& other);
280 
289  virtual UBool operator==(const Format& other) const;
290 
297  virtual Format* clone() const;
298 
307  static TimeZoneFormat* U_EXPORT2 createInstance(const Locale& locale, UErrorCode& status);
308 
314  const TimeZoneNames* getTimeZoneNames() const;
315 
323  void adoptTimeZoneNames(TimeZoneNames *tznames);
324 
330  void setTimeZoneNames(const TimeZoneNames &tznames);
331 
339  UnicodeString& getGMTPattern(UnicodeString& pattern) const;
340 
349  void setGMTPattern(const UnicodeString& pattern, UErrorCode& status);
350 
359  UnicodeString& getGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, UnicodeString& pattern) const;
360 
369  void setGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, const UnicodeString& pattern, UErrorCode& status);
370 
380  UnicodeString& getGMTOffsetDigits(UnicodeString& digits) const;
381 
394  void setGMTOffsetDigits(const UnicodeString& digits, UErrorCode& status);
395 
403  UnicodeString& getGMTZeroFormat(UnicodeString& gmtZeroFormat) const;
404 
412  void setGMTZeroFormat(const UnicodeString& gmtZeroFormat, UErrorCode& status);
413 
421  uint32_t getDefaultParseOptions(void) const;
422 
431  void setDefaultParseOptions(uint32_t flags);
432 
448  UnicodeString& formatOffsetISO8601Basic(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds,
449  UnicodeString& result, UErrorCode& status) const;
450 
466  UnicodeString& formatOffsetISO8601Extended(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds,
467  UnicodeString& result, UErrorCode& status) const;
468 
488  UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const;
489 
509  UnicodeString& formatOffsetShortLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const;
510 
511  using Format::format;
512 
526  virtual UnicodeString& format(UTimeZoneFormatStyle style, const TimeZone& tz, UDate date,
527  UnicodeString& name, UTimeZoneFormatTimeType* timeType = NULL) const;
528 
543  int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos) const;
544 
557  int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const;
558 
571  int32_t parseOffsetShortLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const;
572 
589  virtual TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos,
590  int32_t parseOptions, UTimeZoneFormatTimeType* timeType = NULL) const;
591 
607  TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos,
608  UTimeZoneFormatTimeType* timeType = NULL) const;
609 
610  /* ----------------------------------------------
611  * Format APIs
612  * ---------------------------------------------- */
613 
625  virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo,
626  FieldPosition& pos, UErrorCode& status) const;
627 
640  virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const;
641 
646  static UClassID U_EXPORT2 getStaticClassID(void);
647 
652  virtual UClassID getDynamicClassID() const;
653 
654 protected:
661  TimeZoneFormat(const Locale& locale, UErrorCode& status);
662 
663 private:
664  /* Locale of this object */
665  Locale fLocale;
666 
667  /* Stores the region (could be implicit default) */
668  char fTargetRegion[ULOC_COUNTRY_CAPACITY];
669 
670  /* TimeZoneNames object used by this formatter */
671  TimeZoneNames* fTimeZoneNames;
672 
673  /* TimeZoneGenericNames object used by this formatter - lazily instantiated */
674  TimeZoneGenericNames* fTimeZoneGenericNames;
675 
676  /* Localized GMT format pattern - e.g. "GMT{0}" */
677  UnicodeString fGMTPattern;
678 
679  /* Array of offset patterns used by Localized GMT format - e.g. "+HH:mm" */
680  UnicodeString fGMTOffsetPatterns[UTZFMT_PAT_COUNT];
681 
682  /* Localized decimal digits used by Localized GMT format */
683  UChar32 fGMTOffsetDigits[10];
684 
685  /* Localized GMT zero format - e.g. "GMT" */
686  UnicodeString fGMTZeroFormat;
687 
688  /* Bit flags representing parse options */
689  uint32_t fDefParseOptionFlags;
690 
691  /* Constant parts of GMT format pattern, populated from localized GMT format pattern*/
692  UnicodeString fGMTPatternPrefix; /* Substring before {0} */
693  UnicodeString fGMTPatternSuffix; /* Substring after {0} */
694 
695  /* Compiled offset patterns generated from fGMTOffsetPatterns[] */
696  UVector* fGMTOffsetPatternItems[UTZFMT_PAT_COUNT];
697 
698  UBool fAbuttingOffsetHoursAndMinutes;
699 
710  UnicodeString& formatSpecific(const TimeZone& tz, UTimeZoneNameType stdType, UTimeZoneNameType dstType,
711  UDate date, UnicodeString& name, UTimeZoneFormatTimeType *timeType) const;
712 
721  UnicodeString& formatGeneric(const TimeZone& tz, int32_t genType, UDate date, UnicodeString& name) const;
722 
728  const TimeZoneGenericNames* getTimeZoneGenericNames(UErrorCode& status) const;
729 
737  UnicodeString& formatExemplarLocation(const TimeZone& tz, UnicodeString& name) const;
738 
742  enum OffsetFields {
743  FIELDS_H,
744  FIELDS_HM,
745  FIELDS_HMS
746  };
747 
755  void initGMTPattern(const UnicodeString& gmtPattern, UErrorCode& status);
756 
765  static UVector* parseOffsetPattern(const UnicodeString& pattern, OffsetFields required, UErrorCode& status);
766 
775  static UnicodeString& expandOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status);
776 
785  static UnicodeString& truncateOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status);
786 
797  static UBool toCodePoints(const UnicodeString& str, UChar32* codeArray, int32_t capacity);
798 
809  UnicodeString& formatOffsetISO8601(int32_t offset, UBool isBasic, UBool useUtcIndicator,
810  UBool isShort, UBool ignoreSeconds, UnicodeString& result, UErrorCode& status) const;
811 
819  UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UBool isShort, UnicodeString& result, UErrorCode& status) const;
820 
835  int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos, UBool extendedOnly,
836  UBool* hasDigitOffset = NULL) const;
837 
845  void appendOffsetDigits(UnicodeString& buf, int32_t n, uint8_t minDigits) const;
846 
859  int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos,
860  UBool isShort, UBool* hasDigitOffset) const;
861 
871  int32_t parseOffsetLocalizedGMTPattern(const UnicodeString& text, int32_t start,
872  UBool isShort, int32_t& parsedLen) const;
873 
882  int32_t parseOffsetFields(const UnicodeString& text, int32_t start, UBool isShort, int32_t& parsedLen) const;
883 
895  int32_t parseOffsetFieldsWithPattern(const UnicodeString& text, int32_t start,
896  UVector* patternItems, UBool forceSingleHourDigit, int32_t& hour, int32_t& min, int32_t& sec) const;
897 
905  int32_t parseAbuttingOffsetFields(const UnicodeString& text, int32_t start, int32_t& parsedLen) const;
906 
914  int32_t parseOffsetDefaultLocalizedGMT(const UnicodeString& text, int start, int32_t& parsedLen) const;
915 
924  int32_t parseDefaultOffsetFields(const UnicodeString& text, int32_t start, UChar separator,
925  int32_t& parsedLen) const;
926 
941  int32_t parseOffsetFieldWithLocalizedDigits(const UnicodeString& text, int32_t start,
942  uint8_t minDigits, uint8_t maxDigits, uint16_t minVal, uint16_t maxVal, int32_t& parsedLen) const;
943 
953  int32_t parseSingleLocalizedDigit(const UnicodeString& text, int32_t start, int32_t& len) const;
954 
964  static UnicodeString& formatOffsetWithAsciiDigits(int32_t offset, UChar sep,
965  OffsetFields minFields, OffsetFields maxFields, UnicodeString& result);
966 
979  static int32_t parseAbuttingAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos,
980  OffsetFields minFields, OffsetFields maxFields, UBool fixedHourWidth);
981 
994  static int32_t parseAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos, UChar sep,
995  OffsetFields minFields, OffsetFields maxFields);
996 
1003  static UnicodeString& unquote(const UnicodeString& pattern, UnicodeString& result);
1004 
1010  void initGMTOffsetPatterns(UErrorCode& status);
1011 
1018  void checkAbuttingHoursAndMinutes();
1019 
1025  TimeZone* createTimeZoneForOffset(int32_t offset) const;
1026 
1032  static UTimeZoneFormatTimeType getTimeType(UTimeZoneNameType nameType);
1033 
1042  UnicodeString& getTimeZoneID(const TimeZoneNames::MatchInfoCollection* matches, int32_t idx, UnicodeString& tzID) const;
1043 
1044 
1052  UnicodeString& parseZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1053 
1061  UnicodeString& parseShortZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1062 
1070  UnicodeString& parseExemplarLocation(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const;
1071 };
1072 
1074 
1075 #endif /* !UCONFIG_NO_FORMATTING */
1076 #endif
When a time zone display name is not found within a set of display names used for the specified style...
Definition: tzfmt.h:236
Base class for all formats.
Definition: format.h:94
UTimeZoneFormatGMTOffsetPatternType
Constants for GMT offset pattern types.
Definition: tzfmt.h:157
Negative offset with hours and minutes fields.
Definition: tzfmt.h:172
TimeZoneFormat supports time zone display name formatting and parsing.
Definition: tzfmt.h:261
Fixed width ISO 8601 local time difference (basic format) or the UTC indicator.
Definition: tzfmt.h:86
ISO 8601 local time difference (basic format) with optional seconds field.
Definition: tzfmt.h:107
UTimeZoneFormatParseOption
Constants for parse option flags, used for specifying optional parse behavior.
Definition: tzfmt.h:224
Negative offset with hours field.
Definition: tzfmt.h:187
UTimeZoneFormatTimeType
Constants for time types used by TimeZoneFormat APIs for receiving time type (standard time...
Definition: tzfmt.h:202
Generic location format, such as "United States Time (New York)", "Italy Time".
Definition: tzfmt.h:34
ISO 8601 local time difference (extended format) with optional seconds field, or the UTC indicator...
Definition: tzfmt.h:128
virtual UClassID getDynamicClassID() const
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
Short localized GMT offset format, such as "GMT-5", "UTC+1:30" This style is equivalent to the LDML d...
Definition: tzfmt.h:65
Positive offset with hours field.
Definition: tzfmt.h:182
C++ API: TimeZone object.
double UDate
Date and Time data type.
Definition: utypes.h:201
#define ULOC_COUNTRY_CAPACITY
Useful constant for the maximum size of the country part of a locale ID (including the terminating NU...
Definition: uloc.h:256
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:91
Negative offset with hours, minutes and seconds fields.
Definition: tzfmt.h:177
virtual Format * clone() const =0
Clone this object polymorphically.
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:129
C++ API: Base class for all formats.
#define U_CDECL_BEGIN
This is used to begin a declaration of a library private ICU C API.
Definition: umachine.h:82
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:358
Fixed width ISO 8601 local time difference (basic format).
Definition: tzfmt.h:93
Exemplar location, such as "Los Angeles" and "Paris".
Definition: tzfmt.h:150
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
MatchInfoCollection represents a collection of time zone name matches used by TimeZoneNames#find.
Definition: tznames.h:284
Fixed width ISO 8601 local time difference (extended format) or the UTC indicator.
Definition: tzfmt.h:114
Daylight saving time.
Definition: tzfmt.h:217
Positive offset with hours and minutes fields.
Definition: tzfmt.h:162
TimeZoneNames is an abstract class representing the time zone display name data model defined by UTS#...
Definition: tznames.h:127
Short ISO 8601 locale time difference (basic format).
Definition: tzfmt.h:79
C++ API: TimeZoneNames.
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition: umachine.h:298
#define NULL
Define NULL if necessary, to 0 for C++ and to ((void *)0) for C.
Definition: utypes.h:186
ISO 8601 local time difference (basic format) with optional seconds field, or the UTC indicator...
Definition: tzfmt.h:100
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
UTimeZoneFormatStyle
Constants for time zone display format style used by format/parse APIs in TimeZoneFormat.
Definition: tzfmt.h:29
Time Zone ID, such as "America/Los_Angeles".
Definition: tzfmt.h:140
Specific short format, such as "EST", "PDT".
Definition: tzfmt.h:54
uint16_t UChar
Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...
Definition: umachine.h:278
#define U_CDECL_END
This is used to end a declaration of a library private ICU C API.
Definition: umachine.h:83
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
Positive offset with hours, minutes and seconds fields.
Definition: tzfmt.h:167
Short Time Zone ID (BCP 47 Unicode location extension, time zone type value), such as "uslax"...
Definition: tzfmt.h:145
Generic long non-location format, such as "Eastern Time".
Definition: tzfmt.h:39
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:476
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:47
virtual UBool operator==(const Format &other) const =0
Return true if the given Format objects are semantically equal.
Standard time.
Definition: tzfmt.h:212
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const =0
Parse a string to produce an object.
Fixed width ISO 8601 local time difference (extended format).
Definition: tzfmt.h:121
Basic definitions for ICU, for both C and C++ APIs.
Format & operator=(const Format &)
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:245
Specific long format, such as "Eastern Standard Time".
Definition: tzfmt.h:49
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
UTimeZoneNameType
Constants for time zone display name types.
Definition: tznames.h:27
Short ISO 8601 local time difference (basic format) or the UTC indicator.
Definition: tzfmt.h:72
ISO 8601 local time difference (extended format) with optional seconds field.
Definition: tzfmt.h:135
Localized GMT offset format, such as "GMT-05:00", "UTC+0100".
Definition: tzfmt.h:59
Number of UTimeZoneFormatGMTOffsetPatternType types.
Definition: tzfmt.h:194
Generic short non-location format, such as "ET".
Definition: tzfmt.h:44
int8_t UBool
The ICU boolean type.
Definition: umachine.h:200
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185