1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 5*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 2011-2015, International Business Machines Corporation and 6*0e209d39SAndroid Build Coastguard Worker * others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 8*0e209d39SAndroid Build Coastguard Worker */ 9*0e209d39SAndroid Build Coastguard Worker #ifndef __TZFMT_H 10*0e209d39SAndroid Build Coastguard Worker #define __TZFMT_H 11*0e209d39SAndroid Build Coastguard Worker 12*0e209d39SAndroid Build Coastguard Worker /** 13*0e209d39SAndroid Build Coastguard Worker * \file 14*0e209d39SAndroid Build Coastguard Worker * \brief C++ API: TimeZoneFormat 15*0e209d39SAndroid Build Coastguard Worker */ 16*0e209d39SAndroid Build Coastguard Worker 17*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 18*0e209d39SAndroid Build Coastguard Worker 19*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API 20*0e209d39SAndroid Build Coastguard Worker 21*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING 22*0e209d39SAndroid Build Coastguard Worker 23*0e209d39SAndroid Build Coastguard Worker #include "unicode/format.h" 24*0e209d39SAndroid Build Coastguard Worker #include "unicode/timezone.h" 25*0e209d39SAndroid Build Coastguard Worker #include "unicode/tznames.h" 26*0e209d39SAndroid Build Coastguard Worker 27*0e209d39SAndroid Build Coastguard Worker U_CDECL_BEGIN 28*0e209d39SAndroid Build Coastguard Worker /** 29*0e209d39SAndroid Build Coastguard Worker * Constants for time zone display format style used by format/parse APIs 30*0e209d39SAndroid Build Coastguard Worker * in TimeZoneFormat. 31*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 32*0e209d39SAndroid Build Coastguard Worker */ 33*0e209d39SAndroid Build Coastguard Worker typedef enum UTimeZoneFormatStyle { 34*0e209d39SAndroid Build Coastguard Worker /** 35*0e209d39SAndroid Build Coastguard Worker * Generic location format, such as "United States Time (New York)", "Italy Time" 36*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 37*0e209d39SAndroid Build Coastguard Worker */ 38*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_GENERIC_LOCATION, 39*0e209d39SAndroid Build Coastguard Worker /** 40*0e209d39SAndroid Build Coastguard Worker * Generic long non-location format, such as "Eastern Time". 41*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 42*0e209d39SAndroid Build Coastguard Worker */ 43*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_GENERIC_LONG, 44*0e209d39SAndroid Build Coastguard Worker /** 45*0e209d39SAndroid Build Coastguard Worker * Generic short non-location format, such as "ET". 46*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 47*0e209d39SAndroid Build Coastguard Worker */ 48*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_GENERIC_SHORT, 49*0e209d39SAndroid Build Coastguard Worker /** 50*0e209d39SAndroid Build Coastguard Worker * Specific long format, such as "Eastern Standard Time". 51*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 52*0e209d39SAndroid Build Coastguard Worker */ 53*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_SPECIFIC_LONG, 54*0e209d39SAndroid Build Coastguard Worker /** 55*0e209d39SAndroid Build Coastguard Worker * Specific short format, such as "EST", "PDT". 56*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 57*0e209d39SAndroid Build Coastguard Worker */ 58*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_SPECIFIC_SHORT, 59*0e209d39SAndroid Build Coastguard Worker /** 60*0e209d39SAndroid Build Coastguard Worker * Localized GMT offset format, such as "GMT-05:00", "UTC+0100" 61*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 62*0e209d39SAndroid Build Coastguard Worker */ 63*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_LOCALIZED_GMT, 64*0e209d39SAndroid Build Coastguard Worker /** 65*0e209d39SAndroid Build Coastguard Worker * Short localized GMT offset format, such as "GMT-5", "UTC+1:30" 66*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "O". 67*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 68*0e209d39SAndroid Build Coastguard Worker */ 69*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_LOCALIZED_GMT_SHORT, 70*0e209d39SAndroid Build Coastguard Worker /** 71*0e209d39SAndroid Build Coastguard Worker * Short ISO 8601 local time difference (basic format) or the UTC indicator. 72*0e209d39SAndroid Build Coastguard Worker * For example, "-05", "+0530", and "Z"(UTC). 73*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "X". 74*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 75*0e209d39SAndroid Build Coastguard Worker */ 76*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_BASIC_SHORT, 77*0e209d39SAndroid Build Coastguard Worker /** 78*0e209d39SAndroid Build Coastguard Worker * Short ISO 8601 locale time difference (basic format). 79*0e209d39SAndroid Build Coastguard Worker * For example, "-05" and "+0530". 80*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "x". 81*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 82*0e209d39SAndroid Build Coastguard Worker */ 83*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_BASIC_LOCAL_SHORT, 84*0e209d39SAndroid Build Coastguard Worker /** 85*0e209d39SAndroid Build Coastguard Worker * Fixed width ISO 8601 local time difference (basic format) or the UTC indicator. 86*0e209d39SAndroid Build Coastguard Worker * For example, "-0500", "+0530", and "Z"(UTC). 87*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "XX". 88*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 89*0e209d39SAndroid Build Coastguard Worker */ 90*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_BASIC_FIXED, 91*0e209d39SAndroid Build Coastguard Worker /** 92*0e209d39SAndroid Build Coastguard Worker * Fixed width ISO 8601 local time difference (basic format). 93*0e209d39SAndroid Build Coastguard Worker * For example, "-0500" and "+0530". 94*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "xx". 95*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 96*0e209d39SAndroid Build Coastguard Worker */ 97*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_BASIC_LOCAL_FIXED, 98*0e209d39SAndroid Build Coastguard Worker /** 99*0e209d39SAndroid Build Coastguard Worker * ISO 8601 local time difference (basic format) with optional seconds field, or the UTC indicator. 100*0e209d39SAndroid Build Coastguard Worker * For example, "-0500", "+052538", and "Z"(UTC). 101*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "XXXX". 102*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 103*0e209d39SAndroid Build Coastguard Worker */ 104*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_BASIC_FULL, 105*0e209d39SAndroid Build Coastguard Worker /** 106*0e209d39SAndroid Build Coastguard Worker * ISO 8601 local time difference (basic format) with optional seconds field. 107*0e209d39SAndroid Build Coastguard Worker * For example, "-0500" and "+052538". 108*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "xxxx". 109*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 110*0e209d39SAndroid Build Coastguard Worker */ 111*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_BASIC_LOCAL_FULL, 112*0e209d39SAndroid Build Coastguard Worker /** 113*0e209d39SAndroid Build Coastguard Worker * Fixed width ISO 8601 local time difference (extended format) or the UTC indicator. 114*0e209d39SAndroid Build Coastguard Worker * For example, "-05:00", "+05:30", and "Z"(UTC). 115*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "XXX". 116*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 117*0e209d39SAndroid Build Coastguard Worker */ 118*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_EXTENDED_FIXED, 119*0e209d39SAndroid Build Coastguard Worker /** 120*0e209d39SAndroid Build Coastguard Worker * Fixed width ISO 8601 local time difference (extended format). 121*0e209d39SAndroid Build Coastguard Worker * For example, "-05:00" and "+05:30". 122*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "xxx" and "ZZZZZ". 123*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 124*0e209d39SAndroid Build Coastguard Worker */ 125*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_EXTENDED_LOCAL_FIXED, 126*0e209d39SAndroid Build Coastguard Worker /** 127*0e209d39SAndroid Build Coastguard Worker * ISO 8601 local time difference (extended format) with optional seconds field, or the UTC indicator. 128*0e209d39SAndroid Build Coastguard Worker * For example, "-05:00", "+05:25:38", and "Z"(UTC). 129*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "XXXXX". 130*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 131*0e209d39SAndroid Build Coastguard Worker */ 132*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_EXTENDED_FULL, 133*0e209d39SAndroid Build Coastguard Worker /** 134*0e209d39SAndroid Build Coastguard Worker * ISO 8601 local time difference (extended format) with optional seconds field. 135*0e209d39SAndroid Build Coastguard Worker * For example, "-05:00" and "+05:25:38". 136*0e209d39SAndroid Build Coastguard Worker * This style is equivalent to the LDML date format pattern "xxxxx". 137*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 138*0e209d39SAndroid Build Coastguard Worker */ 139*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ISO_EXTENDED_LOCAL_FULL, 140*0e209d39SAndroid Build Coastguard Worker /** 141*0e209d39SAndroid Build Coastguard Worker * Time Zone ID, such as "America/Los_Angeles". 142*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 143*0e209d39SAndroid Build Coastguard Worker */ 144*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ZONE_ID, 145*0e209d39SAndroid Build Coastguard Worker /** 146*0e209d39SAndroid Build Coastguard Worker * Short Time Zone ID (BCP 47 Unicode location extension, time zone type value), such as "uslax". 147*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 148*0e209d39SAndroid Build Coastguard Worker */ 149*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_ZONE_ID_SHORT, 150*0e209d39SAndroid Build Coastguard Worker /** 151*0e209d39SAndroid Build Coastguard Worker * Exemplar location, such as "Los Angeles" and "Paris". 152*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 153*0e209d39SAndroid Build Coastguard Worker */ 154*0e209d39SAndroid Build Coastguard Worker UTZFMT_STYLE_EXEMPLAR_LOCATION 155*0e209d39SAndroid Build Coastguard Worker } UTimeZoneFormatStyle; 156*0e209d39SAndroid Build Coastguard Worker 157*0e209d39SAndroid Build Coastguard Worker /** 158*0e209d39SAndroid Build Coastguard Worker * Constants for GMT offset pattern types. 159*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 160*0e209d39SAndroid Build Coastguard Worker */ 161*0e209d39SAndroid Build Coastguard Worker typedef enum UTimeZoneFormatGMTOffsetPatternType { 162*0e209d39SAndroid Build Coastguard Worker /** 163*0e209d39SAndroid Build Coastguard Worker * Positive offset with hours and minutes fields 164*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 165*0e209d39SAndroid Build Coastguard Worker */ 166*0e209d39SAndroid Build Coastguard Worker UTZFMT_PAT_POSITIVE_HM, 167*0e209d39SAndroid Build Coastguard Worker /** 168*0e209d39SAndroid Build Coastguard Worker * Positive offset with hours, minutes and seconds fields 169*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 170*0e209d39SAndroid Build Coastguard Worker */ 171*0e209d39SAndroid Build Coastguard Worker UTZFMT_PAT_POSITIVE_HMS, 172*0e209d39SAndroid Build Coastguard Worker /** 173*0e209d39SAndroid Build Coastguard Worker * Negative offset with hours and minutes fields 174*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 175*0e209d39SAndroid Build Coastguard Worker */ 176*0e209d39SAndroid Build Coastguard Worker UTZFMT_PAT_NEGATIVE_HM, 177*0e209d39SAndroid Build Coastguard Worker /** 178*0e209d39SAndroid Build Coastguard Worker * Negative offset with hours, minutes and seconds fields 179*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 180*0e209d39SAndroid Build Coastguard Worker */ 181*0e209d39SAndroid Build Coastguard Worker UTZFMT_PAT_NEGATIVE_HMS, 182*0e209d39SAndroid Build Coastguard Worker /** 183*0e209d39SAndroid Build Coastguard Worker * Positive offset with hours field 184*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 185*0e209d39SAndroid Build Coastguard Worker */ 186*0e209d39SAndroid Build Coastguard Worker UTZFMT_PAT_POSITIVE_H, 187*0e209d39SAndroid Build Coastguard Worker /** 188*0e209d39SAndroid Build Coastguard Worker * Negative offset with hours field 189*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 190*0e209d39SAndroid Build Coastguard Worker */ 191*0e209d39SAndroid Build Coastguard Worker UTZFMT_PAT_NEGATIVE_H, 192*0e209d39SAndroid Build Coastguard Worker 193*0e209d39SAndroid Build Coastguard Worker /* The following cannot be #ifndef U_HIDE_INTERNAL_API, needed for other .h declarations */ 194*0e209d39SAndroid Build Coastguard Worker /** 195*0e209d39SAndroid Build Coastguard Worker * Number of UTimeZoneFormatGMTOffsetPatternType types. 196*0e209d39SAndroid Build Coastguard Worker * @internal 197*0e209d39SAndroid Build Coastguard Worker */ 198*0e209d39SAndroid Build Coastguard Worker UTZFMT_PAT_COUNT = 6 199*0e209d39SAndroid Build Coastguard Worker } UTimeZoneFormatGMTOffsetPatternType; 200*0e209d39SAndroid Build Coastguard Worker 201*0e209d39SAndroid Build Coastguard Worker /** 202*0e209d39SAndroid Build Coastguard Worker * Constants for time types used by TimeZoneFormat APIs for 203*0e209d39SAndroid Build Coastguard Worker * receiving time type (standard time, daylight time or unknown). 204*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 205*0e209d39SAndroid Build Coastguard Worker */ 206*0e209d39SAndroid Build Coastguard Worker typedef enum UTimeZoneFormatTimeType { 207*0e209d39SAndroid Build Coastguard Worker /** 208*0e209d39SAndroid Build Coastguard Worker * Unknown 209*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 210*0e209d39SAndroid Build Coastguard Worker */ 211*0e209d39SAndroid Build Coastguard Worker UTZFMT_TIME_TYPE_UNKNOWN, 212*0e209d39SAndroid Build Coastguard Worker /** 213*0e209d39SAndroid Build Coastguard Worker * Standard time 214*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 215*0e209d39SAndroid Build Coastguard Worker */ 216*0e209d39SAndroid Build Coastguard Worker UTZFMT_TIME_TYPE_STANDARD, 217*0e209d39SAndroid Build Coastguard Worker /** 218*0e209d39SAndroid Build Coastguard Worker * Daylight saving time 219*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 220*0e209d39SAndroid Build Coastguard Worker */ 221*0e209d39SAndroid Build Coastguard Worker UTZFMT_TIME_TYPE_DAYLIGHT 222*0e209d39SAndroid Build Coastguard Worker } UTimeZoneFormatTimeType; 223*0e209d39SAndroid Build Coastguard Worker 224*0e209d39SAndroid Build Coastguard Worker /** 225*0e209d39SAndroid Build Coastguard Worker * Constants for parse option flags, used for specifying optional parse behavior. 226*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 227*0e209d39SAndroid Build Coastguard Worker */ 228*0e209d39SAndroid Build Coastguard Worker typedef enum UTimeZoneFormatParseOption { 229*0e209d39SAndroid Build Coastguard Worker /** 230*0e209d39SAndroid Build Coastguard Worker * No option. 231*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 232*0e209d39SAndroid Build Coastguard Worker */ 233*0e209d39SAndroid Build Coastguard Worker UTZFMT_PARSE_OPTION_NONE = 0x00, 234*0e209d39SAndroid Build Coastguard Worker /** 235*0e209d39SAndroid Build Coastguard Worker * When a time zone display name is not found within a set of display names 236*0e209d39SAndroid Build Coastguard Worker * used for the specified style, look for the name from display names used 237*0e209d39SAndroid Build Coastguard Worker * by other styles. 238*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 239*0e209d39SAndroid Build Coastguard Worker */ 240*0e209d39SAndroid Build Coastguard Worker UTZFMT_PARSE_OPTION_ALL_STYLES = 0x01, 241*0e209d39SAndroid Build Coastguard Worker /** 242*0e209d39SAndroid Build Coastguard Worker * When parsing a time zone display name in \link UTZFMT_STYLE_SPECIFIC_SHORT \endlink, 243*0e209d39SAndroid Build Coastguard Worker * look for the IANA tz database compatible zone abbreviations in addition 244*0e209d39SAndroid Build Coastguard Worker * to the localized names coming from the icu::TimeZoneNames currently 245*0e209d39SAndroid Build Coastguard Worker * used by the icu::TimeZoneFormat. 246*0e209d39SAndroid Build Coastguard Worker * @stable ICU 54 247*0e209d39SAndroid Build Coastguard Worker */ 248*0e209d39SAndroid Build Coastguard Worker UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS = 0x02 249*0e209d39SAndroid Build Coastguard Worker } UTimeZoneFormatParseOption; 250*0e209d39SAndroid Build Coastguard Worker 251*0e209d39SAndroid Build Coastguard Worker U_CDECL_END 252*0e209d39SAndroid Build Coastguard Worker 253*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 254*0e209d39SAndroid Build Coastguard Worker 255*0e209d39SAndroid Build Coastguard Worker class TimeZoneGenericNames; 256*0e209d39SAndroid Build Coastguard Worker class TZDBTimeZoneNames; 257*0e209d39SAndroid Build Coastguard Worker class UVector; 258*0e209d39SAndroid Build Coastguard Worker 259*0e209d39SAndroid Build Coastguard Worker /** 260*0e209d39SAndroid Build Coastguard Worker * <code>TimeZoneFormat</code> supports time zone display name formatting and parsing. 261*0e209d39SAndroid Build Coastguard Worker * An instance of TimeZoneFormat works as a subformatter of {@link SimpleDateFormat}, 262*0e209d39SAndroid Build Coastguard Worker * but you can also directly get a new instance of <code>TimeZoneFormat</code> and 263*0e209d39SAndroid Build Coastguard Worker * formatting/parsing time zone display names. 264*0e209d39SAndroid Build Coastguard Worker * <p> 265*0e209d39SAndroid Build Coastguard Worker * ICU implements the time zone display names defined by <a href="http://www.unicode.org/reports/tr35/">UTS#35 266*0e209d39SAndroid Build Coastguard Worker * Unicode Locale Data Markup Language (LDML)</a>. {@link TimeZoneNames} represents the 267*0e209d39SAndroid Build Coastguard Worker * time zone display name data model and this class implements the algorithm for actual 268*0e209d39SAndroid Build Coastguard Worker * formatting and parsing. 269*0e209d39SAndroid Build Coastguard Worker * 270*0e209d39SAndroid Build Coastguard Worker * @see SimpleDateFormat 271*0e209d39SAndroid Build Coastguard Worker * @see TimeZoneNames 272*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 273*0e209d39SAndroid Build Coastguard Worker */ 274*0e209d39SAndroid Build Coastguard Worker class U_I18N_API TimeZoneFormat : public Format { 275*0e209d39SAndroid Build Coastguard Worker public: 276*0e209d39SAndroid Build Coastguard Worker /** 277*0e209d39SAndroid Build Coastguard Worker * Copy constructor. 278*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 279*0e209d39SAndroid Build Coastguard Worker */ 280*0e209d39SAndroid Build Coastguard Worker TimeZoneFormat(const TimeZoneFormat& other); 281*0e209d39SAndroid Build Coastguard Worker 282*0e209d39SAndroid Build Coastguard Worker /** 283*0e209d39SAndroid Build Coastguard Worker * Destructor. 284*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 285*0e209d39SAndroid Build Coastguard Worker */ 286*0e209d39SAndroid Build Coastguard Worker virtual ~TimeZoneFormat(); 287*0e209d39SAndroid Build Coastguard Worker 288*0e209d39SAndroid Build Coastguard Worker /** 289*0e209d39SAndroid Build Coastguard Worker * Assignment operator. 290*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 291*0e209d39SAndroid Build Coastguard Worker */ 292*0e209d39SAndroid Build Coastguard Worker TimeZoneFormat& operator=(const TimeZoneFormat& other); 293*0e209d39SAndroid Build Coastguard Worker 294*0e209d39SAndroid Build Coastguard Worker /** 295*0e209d39SAndroid Build Coastguard Worker * Return true if the given Format objects are semantically equal. 296*0e209d39SAndroid Build Coastguard Worker * Objects of different subclasses are considered unequal. 297*0e209d39SAndroid Build Coastguard Worker * @param other The object to be compared with. 298*0e209d39SAndroid Build Coastguard Worker * @return Return true if the given Format objects are semantically equal. 299*0e209d39SAndroid Build Coastguard Worker * Objects of different subclasses are considered unequal. 300*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 301*0e209d39SAndroid Build Coastguard Worker */ 302*0e209d39SAndroid Build Coastguard Worker virtual bool operator==(const Format& other) const override; 303*0e209d39SAndroid Build Coastguard Worker 304*0e209d39SAndroid Build Coastguard Worker /** 305*0e209d39SAndroid Build Coastguard Worker * Clone this object polymorphically. The caller is responsible 306*0e209d39SAndroid Build Coastguard Worker * for deleting the result when done. 307*0e209d39SAndroid Build Coastguard Worker * @return A copy of the object 308*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 309*0e209d39SAndroid Build Coastguard Worker */ 310*0e209d39SAndroid Build Coastguard Worker virtual TimeZoneFormat* clone() const override; 311*0e209d39SAndroid Build Coastguard Worker 312*0e209d39SAndroid Build Coastguard Worker /** 313*0e209d39SAndroid Build Coastguard Worker * Creates an instance of <code>TimeZoneFormat</code> for the given locale. 314*0e209d39SAndroid Build Coastguard Worker * @param locale The locale. 315*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status. 316*0e209d39SAndroid Build Coastguard Worker * @return An instance of <code>TimeZoneFormat</code> for the given locale, 317*0e209d39SAndroid Build Coastguard Worker * owned by the caller. 318*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 319*0e209d39SAndroid Build Coastguard Worker */ 320*0e209d39SAndroid Build Coastguard Worker static TimeZoneFormat* U_EXPORT2 createInstance(const Locale& locale, UErrorCode& status); 321*0e209d39SAndroid Build Coastguard Worker 322*0e209d39SAndroid Build Coastguard Worker /** 323*0e209d39SAndroid Build Coastguard Worker * Returns the time zone display name data used by this instance. 324*0e209d39SAndroid Build Coastguard Worker * @return The time zone display name data. 325*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 326*0e209d39SAndroid Build Coastguard Worker */ 327*0e209d39SAndroid Build Coastguard Worker const TimeZoneNames* getTimeZoneNames() const; 328*0e209d39SAndroid Build Coastguard Worker 329*0e209d39SAndroid Build Coastguard Worker /** 330*0e209d39SAndroid Build Coastguard Worker * Sets the time zone display name data to this format instance. 331*0e209d39SAndroid Build Coastguard Worker * The caller should not delete the TimeZoenNames object after it is adopted 332*0e209d39SAndroid Build Coastguard Worker * by this call. 333*0e209d39SAndroid Build Coastguard Worker * @param tznames TimeZoneNames object to be adopted. 334*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 335*0e209d39SAndroid Build Coastguard Worker */ 336*0e209d39SAndroid Build Coastguard Worker void adoptTimeZoneNames(TimeZoneNames *tznames); 337*0e209d39SAndroid Build Coastguard Worker 338*0e209d39SAndroid Build Coastguard Worker /** 339*0e209d39SAndroid Build Coastguard Worker * Sets the time zone display name data to this format instance. 340*0e209d39SAndroid Build Coastguard Worker * @param tznames TimeZoneNames object to be set. 341*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 342*0e209d39SAndroid Build Coastguard Worker */ 343*0e209d39SAndroid Build Coastguard Worker void setTimeZoneNames(const TimeZoneNames &tznames); 344*0e209d39SAndroid Build Coastguard Worker 345*0e209d39SAndroid Build Coastguard Worker /** 346*0e209d39SAndroid Build Coastguard Worker * Returns the localized GMT format pattern. 347*0e209d39SAndroid Build Coastguard Worker * @param pattern Receives the localized GMT format pattern. 348*0e209d39SAndroid Build Coastguard Worker * @return A reference to the result pattern. 349*0e209d39SAndroid Build Coastguard Worker * @see #setGMTPattern 350*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 351*0e209d39SAndroid Build Coastguard Worker */ 352*0e209d39SAndroid Build Coastguard Worker UnicodeString& getGMTPattern(UnicodeString& pattern) const; 353*0e209d39SAndroid Build Coastguard Worker 354*0e209d39SAndroid Build Coastguard Worker /** 355*0e209d39SAndroid Build Coastguard Worker * Sets the localized GMT format pattern. The pattern must contain 356*0e209d39SAndroid Build Coastguard Worker * a single argument {0}, for example "GMT {0}". 357*0e209d39SAndroid Build Coastguard Worker * @param pattern The localized GMT format pattern to be used by this object. 358*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status. 359*0e209d39SAndroid Build Coastguard Worker * @see #getGMTPattern 360*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 361*0e209d39SAndroid Build Coastguard Worker */ 362*0e209d39SAndroid Build Coastguard Worker void setGMTPattern(const UnicodeString& pattern, UErrorCode& status); 363*0e209d39SAndroid Build Coastguard Worker 364*0e209d39SAndroid Build Coastguard Worker /** 365*0e209d39SAndroid Build Coastguard Worker * Returns the offset pattern used for localized GMT format. 366*0e209d39SAndroid Build Coastguard Worker * @param type The offset pattern type enum. 367*0e209d39SAndroid Build Coastguard Worker * @param pattern Receives the offset pattern. 368*0e209d39SAndroid Build Coastguard Worker * @return A reference to the result pattern. 369*0e209d39SAndroid Build Coastguard Worker * @see #setGMTOffsetPattern 370*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 371*0e209d39SAndroid Build Coastguard Worker */ 372*0e209d39SAndroid Build Coastguard Worker UnicodeString& getGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, UnicodeString& pattern) const; 373*0e209d39SAndroid Build Coastguard Worker 374*0e209d39SAndroid Build Coastguard Worker /** 375*0e209d39SAndroid Build Coastguard Worker * Sets the offset pattern for the given offset type. 376*0e209d39SAndroid Build Coastguard Worker * @param type The offset pattern type enum. 377*0e209d39SAndroid Build Coastguard Worker * @param pattern The offset pattern used for localized GMT format for the type. 378*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status. 379*0e209d39SAndroid Build Coastguard Worker * @see #getGMTOffsetPattern 380*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 381*0e209d39SAndroid Build Coastguard Worker */ 382*0e209d39SAndroid Build Coastguard Worker void setGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, const UnicodeString& pattern, UErrorCode& status); 383*0e209d39SAndroid Build Coastguard Worker 384*0e209d39SAndroid Build Coastguard Worker /** 385*0e209d39SAndroid Build Coastguard Worker * Returns the decimal digit characters used for localized GMT format. 386*0e209d39SAndroid Build Coastguard Worker * The return string contains exactly 10 code points (may include Unicode 387*0e209d39SAndroid Build Coastguard Worker * supplementary character) representing digit 0 to digit 9 in the ascending 388*0e209d39SAndroid Build Coastguard Worker * order. 389*0e209d39SAndroid Build Coastguard Worker * @param digits Receives the decimal digits used for localized GMT format. 390*0e209d39SAndroid Build Coastguard Worker * @see #setGMTOffsetDigits 391*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 392*0e209d39SAndroid Build Coastguard Worker */ 393*0e209d39SAndroid Build Coastguard Worker UnicodeString& getGMTOffsetDigits(UnicodeString& digits) const; 394*0e209d39SAndroid Build Coastguard Worker 395*0e209d39SAndroid Build Coastguard Worker /** 396*0e209d39SAndroid Build Coastguard Worker * Sets the decimal digit characters used for localized GMT format. 397*0e209d39SAndroid Build Coastguard Worker * The input <code>digits</code> must contain exactly 10 code points 398*0e209d39SAndroid Build Coastguard Worker * (Unicode supplementary characters are also allowed) representing 399*0e209d39SAndroid Build Coastguard Worker * digit 0 to digit 9 in the ascending order. When the input <code>digits</code> 400*0e209d39SAndroid Build Coastguard Worker * does not satisfy the condition, <code>U_ILLEGAL_ARGUMENT_ERROR</code> 401*0e209d39SAndroid Build Coastguard Worker * will be set to the return status. 402*0e209d39SAndroid Build Coastguard Worker * @param digits The decimal digits used for localized GMT format. 403*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status. 404*0e209d39SAndroid Build Coastguard Worker * @see #getGMTOffsetDigits 405*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 406*0e209d39SAndroid Build Coastguard Worker */ 407*0e209d39SAndroid Build Coastguard Worker void setGMTOffsetDigits(const UnicodeString& digits, UErrorCode& status); 408*0e209d39SAndroid Build Coastguard Worker 409*0e209d39SAndroid Build Coastguard Worker /** 410*0e209d39SAndroid Build Coastguard Worker * Returns the localized GMT format string for GMT(UTC) itself (GMT offset is 0). 411*0e209d39SAndroid Build Coastguard Worker * @param gmtZeroFormat Receives the localized GMT string string for GMT(UTC) itself. 412*0e209d39SAndroid Build Coastguard Worker * @return A reference to the result GMT string. 413*0e209d39SAndroid Build Coastguard Worker * @see #setGMTZeroFormat 414*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 415*0e209d39SAndroid Build Coastguard Worker */ 416*0e209d39SAndroid Build Coastguard Worker UnicodeString& getGMTZeroFormat(UnicodeString& gmtZeroFormat) const; 417*0e209d39SAndroid Build Coastguard Worker 418*0e209d39SAndroid Build Coastguard Worker /** 419*0e209d39SAndroid Build Coastguard Worker * Sets the localized GMT format string for GMT(UTC) itself (GMT offset is 0). 420*0e209d39SAndroid Build Coastguard Worker * @param gmtZeroFormat The localized GMT format string for GMT(UTC). 421*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status. 422*0e209d39SAndroid Build Coastguard Worker * @see #getGMTZeroFormat 423*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 424*0e209d39SAndroid Build Coastguard Worker */ 425*0e209d39SAndroid Build Coastguard Worker void setGMTZeroFormat(const UnicodeString& gmtZeroFormat, UErrorCode& status); 426*0e209d39SAndroid Build Coastguard Worker 427*0e209d39SAndroid Build Coastguard Worker /** 428*0e209d39SAndroid Build Coastguard Worker * Returns the bitwise flags of UTimeZoneFormatParseOption representing the default parse 429*0e209d39SAndroid Build Coastguard Worker * options used by this object. 430*0e209d39SAndroid Build Coastguard Worker * @return the default parse options. 431*0e209d39SAndroid Build Coastguard Worker * @see ParseOption 432*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 433*0e209d39SAndroid Build Coastguard Worker */ 434*0e209d39SAndroid Build Coastguard Worker uint32_t getDefaultParseOptions() const; 435*0e209d39SAndroid Build Coastguard Worker 436*0e209d39SAndroid Build Coastguard Worker /** 437*0e209d39SAndroid Build Coastguard Worker * Sets the default parse options. 438*0e209d39SAndroid Build Coastguard Worker * <p><b>Note</b>: By default, an instance of <code>TimeZoneFormat</code> 439*0e209d39SAndroid Build Coastguard Worker * created by {@link #createInstance} has no parse options set (UTZFMT_PARSE_OPTION_NONE). 440*0e209d39SAndroid Build Coastguard Worker * To specify multiple options, use bitwise flags of UTimeZoneFormatParseOption. 441*0e209d39SAndroid Build Coastguard Worker * @see #UTimeZoneFormatParseOption 442*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 443*0e209d39SAndroid Build Coastguard Worker */ 444*0e209d39SAndroid Build Coastguard Worker void setDefaultParseOptions(uint32_t flags); 445*0e209d39SAndroid Build Coastguard Worker 446*0e209d39SAndroid Build Coastguard Worker /** 447*0e209d39SAndroid Build Coastguard Worker * Returns the ISO 8601 basic time zone string for the given offset. 448*0e209d39SAndroid Build Coastguard Worker * For example, "-08", "-0830" and "Z" 449*0e209d39SAndroid Build Coastguard Worker * 450*0e209d39SAndroid Build Coastguard Worker * @param offset the offset from GMT(UTC) in milliseconds. 451*0e209d39SAndroid Build Coastguard Worker * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0. 452*0e209d39SAndroid Build Coastguard Worker * @param isShort true if shortest form is used. 453*0e209d39SAndroid Build Coastguard Worker * @param ignoreSeconds true if non-zero offset seconds is appended. 454*0e209d39SAndroid Build Coastguard Worker * @param result Receives the ISO format string. 455*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status 456*0e209d39SAndroid Build Coastguard Worker * @return the ISO 8601 basic format. 457*0e209d39SAndroid Build Coastguard Worker * @see #formatOffsetISO8601Extended 458*0e209d39SAndroid Build Coastguard Worker * @see #parseOffsetISO8601 459*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 460*0e209d39SAndroid Build Coastguard Worker */ 461*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatOffsetISO8601Basic(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds, 462*0e209d39SAndroid Build Coastguard Worker UnicodeString& result, UErrorCode& status) const; 463*0e209d39SAndroid Build Coastguard Worker 464*0e209d39SAndroid Build Coastguard Worker /** 465*0e209d39SAndroid Build Coastguard Worker * Returns the ISO 8601 extended time zone string for the given offset. 466*0e209d39SAndroid Build Coastguard Worker * For example, "-08:00", "-08:30" and "Z" 467*0e209d39SAndroid Build Coastguard Worker * 468*0e209d39SAndroid Build Coastguard Worker * @param offset the offset from GMT(UTC) in milliseconds. 469*0e209d39SAndroid Build Coastguard Worker * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0. 470*0e209d39SAndroid Build Coastguard Worker * @param isShort true if shortest form is used. 471*0e209d39SAndroid Build Coastguard Worker * @param ignoreSeconds true if non-zero offset seconds is appended. 472*0e209d39SAndroid Build Coastguard Worker * @param result Receives the ISO format string. 473*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status 474*0e209d39SAndroid Build Coastguard Worker * @return the ISO 8601 basic format. 475*0e209d39SAndroid Build Coastguard Worker * @see #formatOffsetISO8601Extended 476*0e209d39SAndroid Build Coastguard Worker * @see #parseOffsetISO8601 477*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 478*0e209d39SAndroid Build Coastguard Worker */ 479*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatOffsetISO8601Extended(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds, 480*0e209d39SAndroid Build Coastguard Worker UnicodeString& result, UErrorCode& status) const; 481*0e209d39SAndroid Build Coastguard Worker 482*0e209d39SAndroid Build Coastguard Worker /** 483*0e209d39SAndroid Build Coastguard Worker * Returns the localized GMT(UTC) offset format for the given offset. 484*0e209d39SAndroid Build Coastguard Worker * The localized GMT offset is defined by; 485*0e209d39SAndroid Build Coastguard Worker * <ul> 486*0e209d39SAndroid Build Coastguard Worker * <li>GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern}) 487*0e209d39SAndroid Build Coastguard Worker * <li>Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern}) 488*0e209d39SAndroid Build Coastguard Worker * <li>Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits}) 489*0e209d39SAndroid Build Coastguard Worker * <li>GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat}) 490*0e209d39SAndroid Build Coastguard Worker * </ul> 491*0e209d39SAndroid Build Coastguard Worker * This format always uses 2 digit hours and minutes. When the given offset has non-zero 492*0e209d39SAndroid Build Coastguard Worker * seconds, 2 digit seconds field will be appended. For example, 493*0e209d39SAndroid Build Coastguard Worker * GMT+05:00 and GMT+05:28:06. 494*0e209d39SAndroid Build Coastguard Worker * @param offset the offset from GMT(UTC) in milliseconds. 495*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status 496*0e209d39SAndroid Build Coastguard Worker * @param result Receives the localized GMT format string. 497*0e209d39SAndroid Build Coastguard Worker * @return A reference to the result. 498*0e209d39SAndroid Build Coastguard Worker * @see #parseOffsetLocalizedGMT 499*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 500*0e209d39SAndroid Build Coastguard Worker */ 501*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const; 502*0e209d39SAndroid Build Coastguard Worker 503*0e209d39SAndroid Build Coastguard Worker /** 504*0e209d39SAndroid Build Coastguard Worker * Returns the short localized GMT(UTC) offset format for the given offset. 505*0e209d39SAndroid Build Coastguard Worker * The short localized GMT offset is defined by; 506*0e209d39SAndroid Build Coastguard Worker * <ul> 507*0e209d39SAndroid Build Coastguard Worker * <li>GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern}) 508*0e209d39SAndroid Build Coastguard Worker * <li>Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern}) 509*0e209d39SAndroid Build Coastguard Worker * <li>Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits}) 510*0e209d39SAndroid Build Coastguard Worker * <li>GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat}) 511*0e209d39SAndroid Build Coastguard Worker * </ul> 512*0e209d39SAndroid Build Coastguard Worker * This format uses the shortest representation of offset. The hours field does not 513*0e209d39SAndroid Build Coastguard Worker * have leading zero and lower fields with zero will be truncated. For example, 514*0e209d39SAndroid Build Coastguard Worker * GMT+5 and GMT+530. 515*0e209d39SAndroid Build Coastguard Worker * @param offset the offset from GMT(UTC) in milliseconds. 516*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status 517*0e209d39SAndroid Build Coastguard Worker * @param result Receives the short localized GMT format string. 518*0e209d39SAndroid Build Coastguard Worker * @return A reference to the result. 519*0e209d39SAndroid Build Coastguard Worker * @see #parseOffsetShortLocalizedGMT 520*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 521*0e209d39SAndroid Build Coastguard Worker */ 522*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatOffsetShortLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const; 523*0e209d39SAndroid Build Coastguard Worker 524*0e209d39SAndroid Build Coastguard Worker using Format::format; 525*0e209d39SAndroid Build Coastguard Worker 526*0e209d39SAndroid Build Coastguard Worker /** 527*0e209d39SAndroid Build Coastguard Worker * Returns the display name of the time zone at the given date for the style. 528*0e209d39SAndroid Build Coastguard Worker * @param style The style (e.g. <code>UTZFMT_STYLE_GENERIC_LONG</code>, <code>UTZFMT_STYLE_LOCALIZED_GMT</code>...) 529*0e209d39SAndroid Build Coastguard Worker * @param tz The time zone. 530*0e209d39SAndroid Build Coastguard Worker * @param date The date. 531*0e209d39SAndroid Build Coastguard Worker * @param name Receives the display name. 532*0e209d39SAndroid Build Coastguard Worker * @param timeType the output argument for receiving the time type (standard/daylight/unknown) 533*0e209d39SAndroid Build Coastguard Worker * used for the display name, or nullptr if the information is not necessary. 534*0e209d39SAndroid Build Coastguard Worker * @return A reference to the result 535*0e209d39SAndroid Build Coastguard Worker * @see #UTimeZoneFormatStyle 536*0e209d39SAndroid Build Coastguard Worker * @see #UTimeZoneFormatTimeType 537*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 538*0e209d39SAndroid Build Coastguard Worker */ 539*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString& format(UTimeZoneFormatStyle style, const TimeZone& tz, UDate date, 540*0e209d39SAndroid Build Coastguard Worker UnicodeString& name, UTimeZoneFormatTimeType* timeType = nullptr) const; 541*0e209d39SAndroid Build Coastguard Worker 542*0e209d39SAndroid Build Coastguard Worker /** 543*0e209d39SAndroid Build Coastguard Worker * Returns offset from GMT(UTC) in milliseconds for the given ISO 8601 544*0e209d39SAndroid Build Coastguard Worker * style time zone string. When the given string is not an ISO 8601 time zone 545*0e209d39SAndroid Build Coastguard Worker * string, this method sets the current position as the error index 546*0e209d39SAndroid Build Coastguard Worker * to <code>ParsePosition pos</code> and returns 0. 547*0e209d39SAndroid Build Coastguard Worker * @param text The text contains ISO8601 style time zone string (e.g. "-08:00", "Z") 548*0e209d39SAndroid Build Coastguard Worker * at the position. 549*0e209d39SAndroid Build Coastguard Worker * @param pos The ParsePosition object. 550*0e209d39SAndroid Build Coastguard Worker * @return The offset from GMT(UTC) in milliseconds for the given ISO 8601 style 551*0e209d39SAndroid Build Coastguard Worker * time zone string. 552*0e209d39SAndroid Build Coastguard Worker * @see #formatOffsetISO8601Basic 553*0e209d39SAndroid Build Coastguard Worker * @see #formatOffsetISO8601Extended 554*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 555*0e209d39SAndroid Build Coastguard Worker */ 556*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos) const; 557*0e209d39SAndroid Build Coastguard Worker 558*0e209d39SAndroid Build Coastguard Worker /** 559*0e209d39SAndroid Build Coastguard Worker * Returns offset from GMT(UTC) in milliseconds for the given localized GMT 560*0e209d39SAndroid Build Coastguard Worker * offset format string. When the given string cannot be parsed, this method 561*0e209d39SAndroid Build Coastguard Worker * sets the current position as the error index to <code>ParsePosition pos</code> 562*0e209d39SAndroid Build Coastguard Worker * and returns 0. 563*0e209d39SAndroid Build Coastguard Worker * @param text The text contains a localized GMT offset string at the position. 564*0e209d39SAndroid Build Coastguard Worker * @param pos The ParsePosition object. 565*0e209d39SAndroid Build Coastguard Worker * @return The offset from GMT(UTC) in milliseconds for the given localized GMT 566*0e209d39SAndroid Build Coastguard Worker * offset format string. 567*0e209d39SAndroid Build Coastguard Worker * @see #formatOffsetLocalizedGMT 568*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 569*0e209d39SAndroid Build Coastguard Worker */ 570*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const; 571*0e209d39SAndroid Build Coastguard Worker 572*0e209d39SAndroid Build Coastguard Worker /** 573*0e209d39SAndroid Build Coastguard Worker * Returns offset from GMT(UTC) in milliseconds for the given short localized GMT 574*0e209d39SAndroid Build Coastguard Worker * offset format string. When the given string cannot be parsed, this method 575*0e209d39SAndroid Build Coastguard Worker * sets the current position as the error index to <code>ParsePosition pos</code> 576*0e209d39SAndroid Build Coastguard Worker * and returns 0. 577*0e209d39SAndroid Build Coastguard Worker * @param text The text contains a short localized GMT offset string at the position. 578*0e209d39SAndroid Build Coastguard Worker * @param pos The ParsePosition object. 579*0e209d39SAndroid Build Coastguard Worker * @return The offset from GMT(UTC) in milliseconds for the given short localized GMT 580*0e209d39SAndroid Build Coastguard Worker * offset format string. 581*0e209d39SAndroid Build Coastguard Worker * @see #formatOffsetShortLocalizedGMT 582*0e209d39SAndroid Build Coastguard Worker * @stable ICU 51 583*0e209d39SAndroid Build Coastguard Worker */ 584*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetShortLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const; 585*0e209d39SAndroid Build Coastguard Worker 586*0e209d39SAndroid Build Coastguard Worker /** 587*0e209d39SAndroid Build Coastguard Worker * Returns a <code>TimeZone</code> by parsing the time zone string according to 588*0e209d39SAndroid Build Coastguard Worker * the given parse position, the specified format style and parse options. 589*0e209d39SAndroid Build Coastguard Worker * 590*0e209d39SAndroid Build Coastguard Worker * @param text The text contains a time zone string at the position. 591*0e209d39SAndroid Build Coastguard Worker * @param style The format style 592*0e209d39SAndroid Build Coastguard Worker * @param pos The position. 593*0e209d39SAndroid Build Coastguard Worker * @param parseOptions The parse options represented by bitwise flags of UTimeZoneFormatParseOption. 594*0e209d39SAndroid Build Coastguard Worker * @param timeType The output argument for receiving the time type (standard/daylight/unknown), 595*0e209d39SAndroid Build Coastguard Worker * or nullptr if the information is not necessary. 596*0e209d39SAndroid Build Coastguard Worker * @return A <code>TimeZone</code>, or null if the input could not be parsed. 597*0e209d39SAndroid Build Coastguard Worker * @see UTimeZoneFormatStyle 598*0e209d39SAndroid Build Coastguard Worker * @see UTimeZoneFormatParseOption 599*0e209d39SAndroid Build Coastguard Worker * @see UTimeZoneFormatTimeType 600*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 601*0e209d39SAndroid Build Coastguard Worker */ 602*0e209d39SAndroid Build Coastguard Worker virtual TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos, 603*0e209d39SAndroid Build Coastguard Worker int32_t parseOptions, UTimeZoneFormatTimeType* timeType = nullptr) const; 604*0e209d39SAndroid Build Coastguard Worker 605*0e209d39SAndroid Build Coastguard Worker /** 606*0e209d39SAndroid Build Coastguard Worker * Returns a <code>TimeZone</code> by parsing the time zone string according to 607*0e209d39SAndroid Build Coastguard Worker * the given parse position, the specified format style and the default parse options. 608*0e209d39SAndroid Build Coastguard Worker * 609*0e209d39SAndroid Build Coastguard Worker * @param text The text contains a time zone string at the position. 610*0e209d39SAndroid Build Coastguard Worker * @param style The format style 611*0e209d39SAndroid Build Coastguard Worker * @param pos The position. 612*0e209d39SAndroid Build Coastguard Worker * @param timeType The output argument for receiving the time type (standard/daylight/unknown), 613*0e209d39SAndroid Build Coastguard Worker * or nullptr if the information is not necessary. 614*0e209d39SAndroid Build Coastguard Worker * @return A <code>TimeZone</code>, or null if the input could not be parsed. 615*0e209d39SAndroid Build Coastguard Worker * @see UTimeZoneFormatStyle 616*0e209d39SAndroid Build Coastguard Worker * @see UTimeZoneFormatParseOption 617*0e209d39SAndroid Build Coastguard Worker * @see UTimeZoneFormatTimeType 618*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 619*0e209d39SAndroid Build Coastguard Worker */ 620*0e209d39SAndroid Build Coastguard Worker TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos, 621*0e209d39SAndroid Build Coastguard Worker UTimeZoneFormatTimeType* timeType = nullptr) const; 622*0e209d39SAndroid Build Coastguard Worker 623*0e209d39SAndroid Build Coastguard Worker /* ---------------------------------------------- 624*0e209d39SAndroid Build Coastguard Worker * Format APIs 625*0e209d39SAndroid Build Coastguard Worker * ---------------------------------------------- */ 626*0e209d39SAndroid Build Coastguard Worker 627*0e209d39SAndroid Build Coastguard Worker /** 628*0e209d39SAndroid Build Coastguard Worker * Format an object to produce a time zone display string using localized GMT offset format. 629*0e209d39SAndroid Build Coastguard Worker * This method handles Formattable objects with a <code>TimeZone</code>. If a the Formattable 630*0e209d39SAndroid Build Coastguard Worker * object type is not a <code>TimeZone</code>, then it returns a failing UErrorCode. 631*0e209d39SAndroid Build Coastguard Worker * @param obj The object to format. Must be a <code>TimeZone</code>. 632*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. Result is appended to existing contents. 633*0e209d39SAndroid Build Coastguard Worker * @param pos On input: an alignment field, if desired. On output: the offsets of the alignment field. 634*0e209d39SAndroid Build Coastguard Worker * @param status Output param filled with success/failure status. 635*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 636*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 637*0e209d39SAndroid Build Coastguard Worker */ 638*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, 639*0e209d39SAndroid Build Coastguard Worker FieldPosition& pos, UErrorCode& status) const override; 640*0e209d39SAndroid Build Coastguard Worker 641*0e209d39SAndroid Build Coastguard Worker /** 642*0e209d39SAndroid Build Coastguard Worker * Parse a string to produce an object. This methods handles parsing of 643*0e209d39SAndroid Build Coastguard Worker * time zone display strings into Formattable objects with <code>TimeZone</code>. 644*0e209d39SAndroid Build Coastguard Worker * @param source The string to be parsed into an object. 645*0e209d39SAndroid Build Coastguard Worker * @param result Formattable to be set to the parse result. If parse fails, return contents are undefined. 646*0e209d39SAndroid Build Coastguard Worker * @param parse_pos The position to start parsing at. Upon return this param is set to the position after the 647*0e209d39SAndroid Build Coastguard Worker * last character successfully parsed. If the source is not parsed successfully, this param 648*0e209d39SAndroid Build Coastguard Worker * will remain unchanged. 649*0e209d39SAndroid Build Coastguard Worker * @return A newly created Formattable* object, or nullptr on failure. The caller owns this and should 650*0e209d39SAndroid Build Coastguard Worker * delete it when done. 651*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 652*0e209d39SAndroid Build Coastguard Worker */ 653*0e209d39SAndroid Build Coastguard Worker virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const override; 654*0e209d39SAndroid Build Coastguard Worker 655*0e209d39SAndroid Build Coastguard Worker /** 656*0e209d39SAndroid Build Coastguard Worker * ICU "poor man's RTTI", returns a UClassID for this class. 657*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 658*0e209d39SAndroid Build Coastguard Worker */ 659*0e209d39SAndroid Build Coastguard Worker static UClassID U_EXPORT2 getStaticClassID(); 660*0e209d39SAndroid Build Coastguard Worker 661*0e209d39SAndroid Build Coastguard Worker /** 662*0e209d39SAndroid Build Coastguard Worker * ICU "poor man's RTTI", returns a UClassID for the actual class. 663*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 664*0e209d39SAndroid Build Coastguard Worker */ 665*0e209d39SAndroid Build Coastguard Worker virtual UClassID getDynamicClassID() const override; 666*0e209d39SAndroid Build Coastguard Worker 667*0e209d39SAndroid Build Coastguard Worker protected: 668*0e209d39SAndroid Build Coastguard Worker /** 669*0e209d39SAndroid Build Coastguard Worker * Constructs a TimeZoneFormat object for the specified locale. 670*0e209d39SAndroid Build Coastguard Worker * @param locale the locale 671*0e209d39SAndroid Build Coastguard Worker * @param status receives the status. 672*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50 673*0e209d39SAndroid Build Coastguard Worker */ 674*0e209d39SAndroid Build Coastguard Worker TimeZoneFormat(const Locale& locale, UErrorCode& status); 675*0e209d39SAndroid Build Coastguard Worker 676*0e209d39SAndroid Build Coastguard Worker private: 677*0e209d39SAndroid Build Coastguard Worker /* Locale of this object */ 678*0e209d39SAndroid Build Coastguard Worker Locale fLocale; 679*0e209d39SAndroid Build Coastguard Worker 680*0e209d39SAndroid Build Coastguard Worker /* Stores the region (could be implicit default) */ 681*0e209d39SAndroid Build Coastguard Worker char fTargetRegion[ULOC_COUNTRY_CAPACITY]; 682*0e209d39SAndroid Build Coastguard Worker 683*0e209d39SAndroid Build Coastguard Worker /* TimeZoneNames object used by this formatter */ 684*0e209d39SAndroid Build Coastguard Worker TimeZoneNames* fTimeZoneNames; 685*0e209d39SAndroid Build Coastguard Worker 686*0e209d39SAndroid Build Coastguard Worker /* TimeZoneGenericNames object used by this formatter - lazily instantiated */ 687*0e209d39SAndroid Build Coastguard Worker TimeZoneGenericNames* fTimeZoneGenericNames; 688*0e209d39SAndroid Build Coastguard Worker 689*0e209d39SAndroid Build Coastguard Worker /* Localized GMT format pattern - e.g. "GMT{0}" */ 690*0e209d39SAndroid Build Coastguard Worker UnicodeString fGMTPattern; 691*0e209d39SAndroid Build Coastguard Worker 692*0e209d39SAndroid Build Coastguard Worker /* Array of offset patterns used by Localized GMT format - e.g. "+HH:mm" */ 693*0e209d39SAndroid Build Coastguard Worker UnicodeString fGMTOffsetPatterns[UTZFMT_PAT_COUNT]; 694*0e209d39SAndroid Build Coastguard Worker 695*0e209d39SAndroid Build Coastguard Worker /* Localized decimal digits used by Localized GMT format */ 696*0e209d39SAndroid Build Coastguard Worker UChar32 fGMTOffsetDigits[10]; 697*0e209d39SAndroid Build Coastguard Worker 698*0e209d39SAndroid Build Coastguard Worker /* Localized GMT zero format - e.g. "GMT" */ 699*0e209d39SAndroid Build Coastguard Worker UnicodeString fGMTZeroFormat; 700*0e209d39SAndroid Build Coastguard Worker 701*0e209d39SAndroid Build Coastguard Worker /* Bit flags representing parse options */ 702*0e209d39SAndroid Build Coastguard Worker uint32_t fDefParseOptionFlags; 703*0e209d39SAndroid Build Coastguard Worker 704*0e209d39SAndroid Build Coastguard Worker /* Constant parts of GMT format pattern, populated from localized GMT format pattern*/ 705*0e209d39SAndroid Build Coastguard Worker UnicodeString fGMTPatternPrefix; /* Substring before {0} */ 706*0e209d39SAndroid Build Coastguard Worker UnicodeString fGMTPatternSuffix; /* Substring after {0} */ 707*0e209d39SAndroid Build Coastguard Worker 708*0e209d39SAndroid Build Coastguard Worker /* Compiled offset patterns generated from fGMTOffsetPatterns[] */ 709*0e209d39SAndroid Build Coastguard Worker UVector* fGMTOffsetPatternItems[UTZFMT_PAT_COUNT]; 710*0e209d39SAndroid Build Coastguard Worker 711*0e209d39SAndroid Build Coastguard Worker UBool fAbuttingOffsetHoursAndMinutes; 712*0e209d39SAndroid Build Coastguard Worker 713*0e209d39SAndroid Build Coastguard Worker /* TZDBTimeZoneNames object used for parsing */ 714*0e209d39SAndroid Build Coastguard Worker TZDBTimeZoneNames* fTZDBTimeZoneNames; 715*0e209d39SAndroid Build Coastguard Worker 716*0e209d39SAndroid Build Coastguard Worker /** 717*0e209d39SAndroid Build Coastguard Worker * Returns the time zone's specific format string. 718*0e209d39SAndroid Build Coastguard Worker * @param tz the time zone 719*0e209d39SAndroid Build Coastguard Worker * @param stdType the name type used for standard time 720*0e209d39SAndroid Build Coastguard Worker * @param dstType the name type used for daylight time 721*0e209d39SAndroid Build Coastguard Worker * @param date the date 722*0e209d39SAndroid Build Coastguard Worker * @param name receives the time zone's specific format name string 723*0e209d39SAndroid Build Coastguard Worker * @param timeType when null, actual time type is set 724*0e209d39SAndroid Build Coastguard Worker * @return a reference to name. 725*0e209d39SAndroid Build Coastguard Worker */ 726*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatSpecific(const TimeZone& tz, UTimeZoneNameType stdType, UTimeZoneNameType dstType, 727*0e209d39SAndroid Build Coastguard Worker UDate date, UnicodeString& name, UTimeZoneFormatTimeType *timeType) const; 728*0e209d39SAndroid Build Coastguard Worker 729*0e209d39SAndroid Build Coastguard Worker /** 730*0e209d39SAndroid Build Coastguard Worker * Returns the time zone's generic format string. 731*0e209d39SAndroid Build Coastguard Worker * @param tz the time zone 732*0e209d39SAndroid Build Coastguard Worker * @param genType the generic name type 733*0e209d39SAndroid Build Coastguard Worker * @param date the date 734*0e209d39SAndroid Build Coastguard Worker * @param name receives the time zone's generic format name string 735*0e209d39SAndroid Build Coastguard Worker * @return a reference to name. 736*0e209d39SAndroid Build Coastguard Worker */ 737*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatGeneric(const TimeZone& tz, int32_t genType, UDate date, UnicodeString& name) const; 738*0e209d39SAndroid Build Coastguard Worker 739*0e209d39SAndroid Build Coastguard Worker /** 740*0e209d39SAndroid Build Coastguard Worker * Lazily create a TimeZoneGenericNames instance 741*0e209d39SAndroid Build Coastguard Worker * @param status receives the status 742*0e209d39SAndroid Build Coastguard Worker * @return the cached TimeZoneGenericNames. 743*0e209d39SAndroid Build Coastguard Worker */ 744*0e209d39SAndroid Build Coastguard Worker const TimeZoneGenericNames* getTimeZoneGenericNames(UErrorCode& status) const; 745*0e209d39SAndroid Build Coastguard Worker 746*0e209d39SAndroid Build Coastguard Worker /** 747*0e209d39SAndroid Build Coastguard Worker * Lazily create a TZDBTimeZoneNames instance 748*0e209d39SAndroid Build Coastguard Worker * @param status receives the status 749*0e209d39SAndroid Build Coastguard Worker * @return the cached TZDBTimeZoneNames. 750*0e209d39SAndroid Build Coastguard Worker */ 751*0e209d39SAndroid Build Coastguard Worker const TZDBTimeZoneNames* getTZDBTimeZoneNames(UErrorCode& status) const; 752*0e209d39SAndroid Build Coastguard Worker 753*0e209d39SAndroid Build Coastguard Worker /** 754*0e209d39SAndroid Build Coastguard Worker * Private method returning the time zone's exemplar location string. 755*0e209d39SAndroid Build Coastguard Worker * This method will never return empty. 756*0e209d39SAndroid Build Coastguard Worker * @param tz the time zone 757*0e209d39SAndroid Build Coastguard Worker * @param name receives the time zone's exemplar location name 758*0e209d39SAndroid Build Coastguard Worker * @return a reference to name. 759*0e209d39SAndroid Build Coastguard Worker */ 760*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatExemplarLocation(const TimeZone& tz, UnicodeString& name) const; 761*0e209d39SAndroid Build Coastguard Worker 762*0e209d39SAndroid Build Coastguard Worker /** 763*0e209d39SAndroid Build Coastguard Worker * Private enum specifying a combination of offset fields 764*0e209d39SAndroid Build Coastguard Worker */ 765*0e209d39SAndroid Build Coastguard Worker enum OffsetFields { 766*0e209d39SAndroid Build Coastguard Worker FIELDS_H, 767*0e209d39SAndroid Build Coastguard Worker FIELDS_HM, 768*0e209d39SAndroid Build Coastguard Worker FIELDS_HMS 769*0e209d39SAndroid Build Coastguard Worker }; 770*0e209d39SAndroid Build Coastguard Worker 771*0e209d39SAndroid Build Coastguard Worker /** 772*0e209d39SAndroid Build Coastguard Worker * Parses the localized GMT pattern string and initialize 773*0e209d39SAndroid Build Coastguard Worker * localized gmt pattern fields. 774*0e209d39SAndroid Build Coastguard Worker * @param gmtPattern the localized GMT pattern string such as "GMT {0}" 775*0e209d39SAndroid Build Coastguard Worker * @param status U_ILLEGAL_ARGUMENT_ERROR is set when the specified pattern does not 776*0e209d39SAndroid Build Coastguard Worker * contain an argument "{0}". 777*0e209d39SAndroid Build Coastguard Worker */ 778*0e209d39SAndroid Build Coastguard Worker void initGMTPattern(const UnicodeString& gmtPattern, UErrorCode& status); 779*0e209d39SAndroid Build Coastguard Worker 780*0e209d39SAndroid Build Coastguard Worker /** 781*0e209d39SAndroid Build Coastguard Worker * Parse the GMT offset pattern into runtime optimized format. 782*0e209d39SAndroid Build Coastguard Worker * @param pattern the offset pattern string 783*0e209d39SAndroid Build Coastguard Worker * @param required the required set of fields, such as FIELDS_HM 784*0e209d39SAndroid Build Coastguard Worker * @param status U_ILLEGAL_ARGUMENT is set when the specified pattern does not contain 785*0e209d39SAndroid Build Coastguard Worker * pattern letters for the required fields. 786*0e209d39SAndroid Build Coastguard Worker * @return A list of GMTOffsetField objects, or nullptr on error. 787*0e209d39SAndroid Build Coastguard Worker */ 788*0e209d39SAndroid Build Coastguard Worker static UVector* parseOffsetPattern(const UnicodeString& pattern, OffsetFields required, UErrorCode& status); 789*0e209d39SAndroid Build Coastguard Worker 790*0e209d39SAndroid Build Coastguard Worker /** 791*0e209d39SAndroid Build Coastguard Worker * Appends seconds field to the offset pattern with hour/minute 792*0e209d39SAndroid Build Coastguard Worker * Note: This code will be obsoleted once we add hour-minute-second pattern data in CLDR. 793*0e209d39SAndroid Build Coastguard Worker * @param offsetHM the offset pattern including hours and minutes fields 794*0e209d39SAndroid Build Coastguard Worker * @param result the output offset pattern including hour, minute and seconds fields 795*0e209d39SAndroid Build Coastguard Worker * @param status receives the status 796*0e209d39SAndroid Build Coastguard Worker * @return a reference to result 797*0e209d39SAndroid Build Coastguard Worker */ 798*0e209d39SAndroid Build Coastguard Worker static UnicodeString& expandOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status); 799*0e209d39SAndroid Build Coastguard Worker 800*0e209d39SAndroid Build Coastguard Worker /** 801*0e209d39SAndroid Build Coastguard Worker * Truncates minutes field to the offset pattern with hour/minute 802*0e209d39SAndroid Build Coastguard Worker * Note: This code will be obsoleted once we add hour pattern data in CLDR. 803*0e209d39SAndroid Build Coastguard Worker * @param offsetHM the offset pattern including hours and minutes fields 804*0e209d39SAndroid Build Coastguard Worker * @param result the output offset pattern including only hours field 805*0e209d39SAndroid Build Coastguard Worker * @param status receives the status 806*0e209d39SAndroid Build Coastguard Worker * @return a reference to result 807*0e209d39SAndroid Build Coastguard Worker */ 808*0e209d39SAndroid Build Coastguard Worker static UnicodeString& truncateOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status); 809*0e209d39SAndroid Build Coastguard Worker 810*0e209d39SAndroid Build Coastguard Worker /** 811*0e209d39SAndroid Build Coastguard Worker * Break input string into UChar32[]. Each array element represents 812*0e209d39SAndroid Build Coastguard Worker * a code point. This method is used for parsing localized digit 813*0e209d39SAndroid Build Coastguard Worker * characters and support characters in Unicode supplemental planes. 814*0e209d39SAndroid Build Coastguard Worker * @param str the string 815*0e209d39SAndroid Build Coastguard Worker * @param codeArray receives the result 816*0e209d39SAndroid Build Coastguard Worker * @param capacity the capacity of codeArray 817*0e209d39SAndroid Build Coastguard Worker * @return true when the specified code array is fully filled with code points 818*0e209d39SAndroid Build Coastguard Worker * (no under/overflow). 819*0e209d39SAndroid Build Coastguard Worker */ 820*0e209d39SAndroid Build Coastguard Worker static UBool toCodePoints(const UnicodeString& str, UChar32* codeArray, int32_t capacity); 821*0e209d39SAndroid Build Coastguard Worker 822*0e209d39SAndroid Build Coastguard Worker /** 823*0e209d39SAndroid Build Coastguard Worker * Private method supprting all of ISO8601 formats 824*0e209d39SAndroid Build Coastguard Worker * @param offset the offset from GMT(UTC) in milliseconds. 825*0e209d39SAndroid Build Coastguard Worker * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0. 826*0e209d39SAndroid Build Coastguard Worker * @param isShort true if shortest form is used. 827*0e209d39SAndroid Build Coastguard Worker * @param ignoreSeconds true if non-zero offset seconds is appended. 828*0e209d39SAndroid Build Coastguard Worker * @param result Receives the result 829*0e209d39SAndroid Build Coastguard Worker * @param status Receives the status 830*0e209d39SAndroid Build Coastguard Worker * @return the ISO 8601 basic format. 831*0e209d39SAndroid Build Coastguard Worker */ 832*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatOffsetISO8601(int32_t offset, UBool isBasic, UBool useUtcIndicator, 833*0e209d39SAndroid Build Coastguard Worker UBool isShort, UBool ignoreSeconds, UnicodeString& result, UErrorCode& status) const; 834*0e209d39SAndroid Build Coastguard Worker 835*0e209d39SAndroid Build Coastguard Worker /** 836*0e209d39SAndroid Build Coastguard Worker * Private method used for localized GMT formatting. 837*0e209d39SAndroid Build Coastguard Worker * @param offset the zone's UTC offset 838*0e209d39SAndroid Build Coastguard Worker * @param isShort true if the short localized GMT format is desired. 839*0e209d39SAndroid Build Coastguard Worker * @param result receives the localized GMT format string 840*0e209d39SAndroid Build Coastguard Worker * @param status receives the status 841*0e209d39SAndroid Build Coastguard Worker */ 842*0e209d39SAndroid Build Coastguard Worker UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UBool isShort, UnicodeString& result, UErrorCode& status) const; 843*0e209d39SAndroid Build Coastguard Worker 844*0e209d39SAndroid Build Coastguard Worker /** 845*0e209d39SAndroid Build Coastguard Worker * Returns offset from GMT(UTC) in milliseconds for the given ISO 8601 style 846*0e209d39SAndroid Build Coastguard Worker * (extended format) time zone string. When the given string is not an ISO 8601 time 847*0e209d39SAndroid Build Coastguard Worker * zone string, this method sets the current position as the error index 848*0e209d39SAndroid Build Coastguard Worker * to <code>ParsePosition pos</code> and returns 0. 849*0e209d39SAndroid Build Coastguard Worker * @param text the text contains ISO 8601 style time zone string (e.g. "-08:00", "Z") 850*0e209d39SAndroid Build Coastguard Worker * at the position. 851*0e209d39SAndroid Build Coastguard Worker * @param pos the position, non-negative error index will be set on failure. 852*0e209d39SAndroid Build Coastguard Worker * @param extendedOnly true if parsing the text as ISO 8601 extended offset format (e.g. "-08:00"), 853*0e209d39SAndroid Build Coastguard Worker * or false to evaluate the text as basic format. 854*0e209d39SAndroid Build Coastguard Worker * @param hasDigitOffset receiving if the parsed zone string contains offset digits. 855*0e209d39SAndroid Build Coastguard Worker * @return the offset from GMT(UTC) in milliseconds for the given ISO 8601 style 856*0e209d39SAndroid Build Coastguard Worker * time zone string. 857*0e209d39SAndroid Build Coastguard Worker */ 858*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos, UBool extendedOnly, 859*0e209d39SAndroid Build Coastguard Worker UBool* hasDigitOffset = nullptr) const; 860*0e209d39SAndroid Build Coastguard Worker 861*0e209d39SAndroid Build Coastguard Worker /** 862*0e209d39SAndroid Build Coastguard Worker * Appends localized digits to the buffer. 863*0e209d39SAndroid Build Coastguard Worker * This code assumes that the input number is 0 - 59 864*0e209d39SAndroid Build Coastguard Worker * @param buf the target buffer 865*0e209d39SAndroid Build Coastguard Worker * @param n the integer number 866*0e209d39SAndroid Build Coastguard Worker * @param minDigits the minimum digits width 867*0e209d39SAndroid Build Coastguard Worker */ 868*0e209d39SAndroid Build Coastguard Worker void appendOffsetDigits(UnicodeString& buf, int32_t n, uint8_t minDigits) const; 869*0e209d39SAndroid Build Coastguard Worker 870*0e209d39SAndroid Build Coastguard Worker /** 871*0e209d39SAndroid Build Coastguard Worker * Returns offset from GMT(UTC) in milliseconds for the given localized GMT 872*0e209d39SAndroid Build Coastguard Worker * offset format string. When the given string cannot be parsed, this method 873*0e209d39SAndroid Build Coastguard Worker * sets the current position as the error index to <code>ParsePosition pos</code> 874*0e209d39SAndroid Build Coastguard Worker * and returns 0. 875*0e209d39SAndroid Build Coastguard Worker * @param text the text contains a localized GMT offset string at the position. 876*0e209d39SAndroid Build Coastguard Worker * @param pos the position, non-negative error index will be set on failure. 877*0e209d39SAndroid Build Coastguard Worker * @param isShort true if this parser to try the short format first 878*0e209d39SAndroid Build Coastguard Worker * @param hasDigitOffset receiving if the parsed zone string contains offset digits. 879*0e209d39SAndroid Build Coastguard Worker * @return the offset from GMT(UTC) in milliseconds for the given localized GMT 880*0e209d39SAndroid Build Coastguard Worker * offset format string. 881*0e209d39SAndroid Build Coastguard Worker */ 882*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos, 883*0e209d39SAndroid Build Coastguard Worker UBool isShort, UBool* hasDigitOffset) const; 884*0e209d39SAndroid Build Coastguard Worker 885*0e209d39SAndroid Build Coastguard Worker /** 886*0e209d39SAndroid Build Coastguard Worker * Parse localized GMT format generated by the patter used by this formatter, except 887*0e209d39SAndroid Build Coastguard Worker * GMT Zero format. 888*0e209d39SAndroid Build Coastguard Worker * @param text the input text 889*0e209d39SAndroid Build Coastguard Worker * @param start the start index 890*0e209d39SAndroid Build Coastguard Worker * @param isShort true if the short localized format is parsed. 891*0e209d39SAndroid Build Coastguard Worker * @param parsedLen receives the parsed length 892*0e209d39SAndroid Build Coastguard Worker * @return the parsed offset in milliseconds 893*0e209d39SAndroid Build Coastguard Worker */ 894*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetLocalizedGMTPattern(const UnicodeString& text, int32_t start, 895*0e209d39SAndroid Build Coastguard Worker UBool isShort, int32_t& parsedLen) const; 896*0e209d39SAndroid Build Coastguard Worker 897*0e209d39SAndroid Build Coastguard Worker /** 898*0e209d39SAndroid Build Coastguard Worker * Parses localized GMT offset fields into offset. 899*0e209d39SAndroid Build Coastguard Worker * @param text the input text 900*0e209d39SAndroid Build Coastguard Worker * @param start the start index 901*0e209d39SAndroid Build Coastguard Worker * @param isShort true if this is a short format - currently not used 902*0e209d39SAndroid Build Coastguard Worker * @param parsedLen the parsed length, or 0 on failure. 903*0e209d39SAndroid Build Coastguard Worker * @return the parsed offset in milliseconds. 904*0e209d39SAndroid Build Coastguard Worker */ 905*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetFields(const UnicodeString& text, int32_t start, UBool isShort, int32_t& parsedLen) const; 906*0e209d39SAndroid Build Coastguard Worker 907*0e209d39SAndroid Build Coastguard Worker /** 908*0e209d39SAndroid Build Coastguard Worker * Parse localized GMT offset fields with the given pattern. 909*0e209d39SAndroid Build Coastguard Worker * @param text the input text 910*0e209d39SAndroid Build Coastguard Worker * @param start the start index 911*0e209d39SAndroid Build Coastguard Worker * @param pattenItems the pattern (already itemized) 912*0e209d39SAndroid Build Coastguard Worker * @param forceSingleHourDigit true if hours field is parsed as a single digit 913*0e209d39SAndroid Build Coastguard Worker * @param hour receives the hour offset field 914*0e209d39SAndroid Build Coastguard Worker * @param min receives the minute offset field 915*0e209d39SAndroid Build Coastguard Worker * @param sec receives the second offset field 916*0e209d39SAndroid Build Coastguard Worker * @return the parsed length 917*0e209d39SAndroid Build Coastguard Worker */ 918*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetFieldsWithPattern(const UnicodeString& text, int32_t start, 919*0e209d39SAndroid Build Coastguard Worker UVector* patternItems, UBool forceSingleHourDigit, int32_t& hour, int32_t& min, int32_t& sec) const; 920*0e209d39SAndroid Build Coastguard Worker 921*0e209d39SAndroid Build Coastguard Worker /** 922*0e209d39SAndroid Build Coastguard Worker * Parses abutting localized GMT offset fields (such as 0800) into offset. 923*0e209d39SAndroid Build Coastguard Worker * @param text the input text 924*0e209d39SAndroid Build Coastguard Worker * @param start the start index 925*0e209d39SAndroid Build Coastguard Worker * @param parsedLen the parsed length, or 0 on failure 926*0e209d39SAndroid Build Coastguard Worker * @return the parsed offset in milliseconds. 927*0e209d39SAndroid Build Coastguard Worker */ 928*0e209d39SAndroid Build Coastguard Worker int32_t parseAbuttingOffsetFields(const UnicodeString& text, int32_t start, int32_t& parsedLen) const; 929*0e209d39SAndroid Build Coastguard Worker 930*0e209d39SAndroid Build Coastguard Worker /** 931*0e209d39SAndroid Build Coastguard Worker * Parses the input text using the default format patterns (e.g. "UTC{0}"). 932*0e209d39SAndroid Build Coastguard Worker * @param text the input text 933*0e209d39SAndroid Build Coastguard Worker * @param start the start index 934*0e209d39SAndroid Build Coastguard Worker * @param parsedLen the parsed length, or 0 on failure 935*0e209d39SAndroid Build Coastguard Worker * @return the parsed offset in milliseconds. 936*0e209d39SAndroid Build Coastguard Worker */ 937*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetDefaultLocalizedGMT(const UnicodeString& text, int start, int32_t& parsedLen) const; 938*0e209d39SAndroid Build Coastguard Worker 939*0e209d39SAndroid Build Coastguard Worker /** 940*0e209d39SAndroid Build Coastguard Worker * Parses the input GMT offset fields with the default offset pattern. 941*0e209d39SAndroid Build Coastguard Worker * @param text the input text 942*0e209d39SAndroid Build Coastguard Worker * @param start the start index 943*0e209d39SAndroid Build Coastguard Worker * @param separator the separator character, e.g. ':' 944*0e209d39SAndroid Build Coastguard Worker * @param parsedLen the parsed length, or 0 on failure. 945*0e209d39SAndroid Build Coastguard Worker * @return the parsed offset in milliseconds. 946*0e209d39SAndroid Build Coastguard Worker */ 947*0e209d39SAndroid Build Coastguard Worker int32_t parseDefaultOffsetFields(const UnicodeString& text, int32_t start, char16_t separator, 948*0e209d39SAndroid Build Coastguard Worker int32_t& parsedLen) const; 949*0e209d39SAndroid Build Coastguard Worker 950*0e209d39SAndroid Build Coastguard Worker /** 951*0e209d39SAndroid Build Coastguard Worker * Reads an offset field value. This method will stop parsing when 952*0e209d39SAndroid Build Coastguard Worker * 1) number of digits reaches <code>maxDigits</code> 953*0e209d39SAndroid Build Coastguard Worker * 2) just before already parsed number exceeds <code>maxVal</code> 954*0e209d39SAndroid Build Coastguard Worker * 955*0e209d39SAndroid Build Coastguard Worker * @param text the text 956*0e209d39SAndroid Build Coastguard Worker * @param start the start offset 957*0e209d39SAndroid Build Coastguard Worker * @param minDigits the minimum number of required digits 958*0e209d39SAndroid Build Coastguard Worker * @param maxDigits the maximum number of digits 959*0e209d39SAndroid Build Coastguard Worker * @param minVal the minimum value 960*0e209d39SAndroid Build Coastguard Worker * @param maxVal the maximum value 961*0e209d39SAndroid Build Coastguard Worker * @param parsedLen the actual parsed length. 962*0e209d39SAndroid Build Coastguard Worker * @return the integer value parsed 963*0e209d39SAndroid Build Coastguard Worker */ 964*0e209d39SAndroid Build Coastguard Worker int32_t parseOffsetFieldWithLocalizedDigits(const UnicodeString& text, int32_t start, 965*0e209d39SAndroid Build Coastguard Worker uint8_t minDigits, uint8_t maxDigits, uint16_t minVal, uint16_t maxVal, int32_t& parsedLen) const; 966*0e209d39SAndroid Build Coastguard Worker 967*0e209d39SAndroid Build Coastguard Worker /** 968*0e209d39SAndroid Build Coastguard Worker * Reads a single decimal digit, either localized digits used by this object 969*0e209d39SAndroid Build Coastguard Worker * or any Unicode numeric character. 970*0e209d39SAndroid Build Coastguard Worker * @param text the text 971*0e209d39SAndroid Build Coastguard Worker * @param start the start index 972*0e209d39SAndroid Build Coastguard Worker * @param len the actual length read from the text 973*0e209d39SAndroid Build Coastguard Worker * the start index is not a decimal number. 974*0e209d39SAndroid Build Coastguard Worker * @return the integer value of the parsed digit, or -1 on failure. 975*0e209d39SAndroid Build Coastguard Worker */ 976*0e209d39SAndroid Build Coastguard Worker int32_t parseSingleLocalizedDigit(const UnicodeString& text, int32_t start, int32_t& len) const; 977*0e209d39SAndroid Build Coastguard Worker 978*0e209d39SAndroid Build Coastguard Worker /** 979*0e209d39SAndroid Build Coastguard Worker * Formats offset using ASCII digits. The input offset range must be 980*0e209d39SAndroid Build Coastguard Worker * within +/-24 hours (exclusive). 981*0e209d39SAndroid Build Coastguard Worker * @param offset The offset 982*0e209d39SAndroid Build Coastguard Worker * @param sep The field separator character or 0 if not required 983*0e209d39SAndroid Build Coastguard Worker * @param minFields The minimum fields 984*0e209d39SAndroid Build Coastguard Worker * @param maxFields The maximum fields 985*0e209d39SAndroid Build Coastguard Worker * @return The offset string 986*0e209d39SAndroid Build Coastguard Worker */ 987*0e209d39SAndroid Build Coastguard Worker static UnicodeString& formatOffsetWithAsciiDigits(int32_t offset, char16_t sep, 988*0e209d39SAndroid Build Coastguard Worker OffsetFields minFields, OffsetFields maxFields, UnicodeString& result); 989*0e209d39SAndroid Build Coastguard Worker 990*0e209d39SAndroid Build Coastguard Worker /** 991*0e209d39SAndroid Build Coastguard Worker * Parses offset represented by contiguous ASCII digits. 992*0e209d39SAndroid Build Coastguard Worker * <p> 993*0e209d39SAndroid Build Coastguard Worker * Note: This method expects the input position is already at the start of 994*0e209d39SAndroid Build Coastguard Worker * ASCII digits and does not parse sign (+/-). 995*0e209d39SAndroid Build Coastguard Worker * @param text The text contains a sequence of ASCII digits 996*0e209d39SAndroid Build Coastguard Worker * @param pos The parse position 997*0e209d39SAndroid Build Coastguard Worker * @param minFields The minimum Fields to be parsed 998*0e209d39SAndroid Build Coastguard Worker * @param maxFields The maximum Fields to be parsed 999*0e209d39SAndroid Build Coastguard Worker * @param fixedHourWidth true if hours field must be width of 2 1000*0e209d39SAndroid Build Coastguard Worker * @return Parsed offset, 0 or positive number. 1001*0e209d39SAndroid Build Coastguard Worker */ 1002*0e209d39SAndroid Build Coastguard Worker static int32_t parseAbuttingAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos, 1003*0e209d39SAndroid Build Coastguard Worker OffsetFields minFields, OffsetFields maxFields, UBool fixedHourWidth); 1004*0e209d39SAndroid Build Coastguard Worker 1005*0e209d39SAndroid Build Coastguard Worker /** 1006*0e209d39SAndroid Build Coastguard Worker * Parses offset represented by ASCII digits and separators. 1007*0e209d39SAndroid Build Coastguard Worker * <p> 1008*0e209d39SAndroid Build Coastguard Worker * Note: This method expects the input position is already at the start of 1009*0e209d39SAndroid Build Coastguard Worker * ASCII digits and does not parse sign (+/-). 1010*0e209d39SAndroid Build Coastguard Worker * @param text The text 1011*0e209d39SAndroid Build Coastguard Worker * @param pos The parse position 1012*0e209d39SAndroid Build Coastguard Worker * @param sep The separator character 1013*0e209d39SAndroid Build Coastguard Worker * @param minFields The minimum Fields to be parsed 1014*0e209d39SAndroid Build Coastguard Worker * @param maxFields The maximum Fields to be parsed 1015*0e209d39SAndroid Build Coastguard Worker * @return Parsed offset, 0 or positive number. 1016*0e209d39SAndroid Build Coastguard Worker */ 1017*0e209d39SAndroid Build Coastguard Worker static int32_t parseAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos, char16_t sep, 1018*0e209d39SAndroid Build Coastguard Worker OffsetFields minFields, OffsetFields maxFields); 1019*0e209d39SAndroid Build Coastguard Worker 1020*0e209d39SAndroid Build Coastguard Worker /** 1021*0e209d39SAndroid Build Coastguard Worker * Unquotes the message format style pattern. 1022*0e209d39SAndroid Build Coastguard Worker * @param pattern the pattern 1023*0e209d39SAndroid Build Coastguard Worker * @param result receive the unquoted pattern. 1024*0e209d39SAndroid Build Coastguard Worker * @return A reference to result. 1025*0e209d39SAndroid Build Coastguard Worker */ 1026*0e209d39SAndroid Build Coastguard Worker static UnicodeString& unquote(const UnicodeString& pattern, UnicodeString& result); 1027*0e209d39SAndroid Build Coastguard Worker 1028*0e209d39SAndroid Build Coastguard Worker /** 1029*0e209d39SAndroid Build Coastguard Worker * Initialize localized GMT format offset hour/min/sec patterns. 1030*0e209d39SAndroid Build Coastguard Worker * This method parses patterns into optimized run-time format. 1031*0e209d39SAndroid Build Coastguard Worker * @param status receives the status. 1032*0e209d39SAndroid Build Coastguard Worker */ 1033*0e209d39SAndroid Build Coastguard Worker void initGMTOffsetPatterns(UErrorCode& status); 1034*0e209d39SAndroid Build Coastguard Worker 1035*0e209d39SAndroid Build Coastguard Worker /** 1036*0e209d39SAndroid Build Coastguard Worker * Check if there are any GMT format offset patterns without 1037*0e209d39SAndroid Build Coastguard Worker * any separators between hours field and minutes field and update 1038*0e209d39SAndroid Build Coastguard Worker * fAbuttingOffsetHoursAndMinutes field. This method must be called 1039*0e209d39SAndroid Build Coastguard Worker * after all patterns are parsed into pattern items. 1040*0e209d39SAndroid Build Coastguard Worker */ 1041*0e209d39SAndroid Build Coastguard Worker void checkAbuttingHoursAndMinutes(); 1042*0e209d39SAndroid Build Coastguard Worker 1043*0e209d39SAndroid Build Coastguard Worker /** 1044*0e209d39SAndroid Build Coastguard Worker * Creates an instance of TimeZone for the given offset 1045*0e209d39SAndroid Build Coastguard Worker * @param offset the offset 1046*0e209d39SAndroid Build Coastguard Worker * @return A TimeZone with the given offset 1047*0e209d39SAndroid Build Coastguard Worker */ 1048*0e209d39SAndroid Build Coastguard Worker TimeZone* createTimeZoneForOffset(int32_t offset) const; 1049*0e209d39SAndroid Build Coastguard Worker 1050*0e209d39SAndroid Build Coastguard Worker /** 1051*0e209d39SAndroid Build Coastguard Worker * Returns the time type for the given name type 1052*0e209d39SAndroid Build Coastguard Worker * @param nameType the name type 1053*0e209d39SAndroid Build Coastguard Worker * @return the time type (unknown/standard/daylight) 1054*0e209d39SAndroid Build Coastguard Worker */ 1055*0e209d39SAndroid Build Coastguard Worker static UTimeZoneFormatTimeType getTimeType(UTimeZoneNameType nameType); 1056*0e209d39SAndroid Build Coastguard Worker 1057*0e209d39SAndroid Build Coastguard Worker /** 1058*0e209d39SAndroid Build Coastguard Worker * Returns the time zone ID of a match at the specified index within 1059*0e209d39SAndroid Build Coastguard Worker * the MatchInfoCollection. 1060*0e209d39SAndroid Build Coastguard Worker * @param matches the collection of matches 1061*0e209d39SAndroid Build Coastguard Worker * @param idx the index within matches 1062*0e209d39SAndroid Build Coastguard Worker * @param tzID receives the resolved time zone ID 1063*0e209d39SAndroid Build Coastguard Worker * @return a reference to tzID. 1064*0e209d39SAndroid Build Coastguard Worker */ 1065*0e209d39SAndroid Build Coastguard Worker UnicodeString& getTimeZoneID(const TimeZoneNames::MatchInfoCollection* matches, int32_t idx, UnicodeString& tzID) const; 1066*0e209d39SAndroid Build Coastguard Worker 1067*0e209d39SAndroid Build Coastguard Worker 1068*0e209d39SAndroid Build Coastguard Worker /** 1069*0e209d39SAndroid Build Coastguard Worker * Parse a zone ID. 1070*0e209d39SAndroid Build Coastguard Worker * @param text the text contains a time zone ID string at the position. 1071*0e209d39SAndroid Build Coastguard Worker * @param pos the position 1072*0e209d39SAndroid Build Coastguard Worker * @param tzID receives the zone ID 1073*0e209d39SAndroid Build Coastguard Worker * @return a reference to tzID 1074*0e209d39SAndroid Build Coastguard Worker */ 1075*0e209d39SAndroid Build Coastguard Worker UnicodeString& parseZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const; 1076*0e209d39SAndroid Build Coastguard Worker 1077*0e209d39SAndroid Build Coastguard Worker /** 1078*0e209d39SAndroid Build Coastguard Worker * Parse a short zone ID. 1079*0e209d39SAndroid Build Coastguard Worker * @param text the text contains a short time zone ID string at the position. 1080*0e209d39SAndroid Build Coastguard Worker * @param pos the position 1081*0e209d39SAndroid Build Coastguard Worker * @param tzID receives the short zone ID 1082*0e209d39SAndroid Build Coastguard Worker * @return a reference to tzID 1083*0e209d39SAndroid Build Coastguard Worker */ 1084*0e209d39SAndroid Build Coastguard Worker UnicodeString& parseShortZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const; 1085*0e209d39SAndroid Build Coastguard Worker 1086*0e209d39SAndroid Build Coastguard Worker /** 1087*0e209d39SAndroid Build Coastguard Worker * Parse an exemplar location string. 1088*0e209d39SAndroid Build Coastguard Worker * @param text the text contains an exemplar location string at the position. 1089*0e209d39SAndroid Build Coastguard Worker * @param pos the position. 1090*0e209d39SAndroid Build Coastguard Worker * @param tzID receives the time zone ID 1091*0e209d39SAndroid Build Coastguard Worker * @return a reference to tzID 1092*0e209d39SAndroid Build Coastguard Worker */ 1093*0e209d39SAndroid Build Coastguard Worker UnicodeString& parseExemplarLocation(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const; 1094*0e209d39SAndroid Build Coastguard Worker }; 1095*0e209d39SAndroid Build Coastguard Worker 1096*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 1097*0e209d39SAndroid Build Coastguard Worker 1098*0e209d39SAndroid Build Coastguard Worker #endif /* !UCONFIG_NO_FORMATTING */ 1099*0e209d39SAndroid Build Coastguard Worker 1100*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */ 1101*0e209d39SAndroid Build Coastguard Worker 1102*0e209d39SAndroid Build Coastguard Worker #endif 1103