1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* Copyright (c) 2003-2013, International Business Machines 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Author: Alan Liu 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Created: July 21 2003 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Since: ICU 2.8 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef OLSONTZ_H 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define OLSONTZ_H 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/basictz.h" 1959d709d503bab6e2b61931737e662dd293b40578ccornelius#include "umutex.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct UResourceBundle; 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass SimpleTimeZone; 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * A time zone based on the Olson tz database. Olson time zones change 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behavior over time. The raw offset, rules, presence or absence of 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * daylight savings time, and even the daylight savings amount can all 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * vary. 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This class uses a resource bundle named "zoneinfo". Zoneinfo is a 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * table containing different kinds of resources. In several places, 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * zones are referred to using integers. A zone's integer is a number 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * from 0..n-1, where n is the number of zones, with the zones sorted 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in lexicographic order. 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1. Zones. These have keys corresponding to the Olson IDs, e.g., 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "Asia/Shanghai". Each resource describes the behavior of the given 4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * zone. Zones come in two different formats. 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * a. Zone (table). A zone is a table resource contains several 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * type of resources below: 4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - typeOffsets:intvector (Required) 4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Sets of UTC raw/dst offset pairs in seconds. Entries at 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 2n represents raw offset and 2n+1 represents dst offset 5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * paired with the raw offset at 2n. The very first pair represents 5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * the initial zone offset (before the first transition) always. 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - trans:intvector (Optional) 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * List of transition times represented by 32bit seconds from the 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * epoch (1970-01-01T00:00Z) in ascending order. 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - transPre32/transPost32:intvector (Optional) 5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * List of transition times before/after 32bit minimum seconds. 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Each time is represented by a pair of 32bit integer. 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - typeMap:bin (Optional) 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Array of bytes representing the mapping between each transition 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * time (transPre32/trans/transPost32) and its corresponding offset 6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * data (typeOffsets). 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - finalRule:string (Optional) 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * If a recurrent transition rule is applicable to a zone forever 7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * after the final transition time, finalRule represents the rule 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * in Rules data. 7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - finalRaw:int (Optional) 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * When finalRule is available, finalRaw is required and specifies 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * the raw (base) offset of the rule. 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - finalYear:int (Optional) 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * When finalRule is available, finalYear is required and specifies 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * the start year of the rule. 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * - links:intvector (Optional) 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * When this zone data is shared with other zones, links specifies 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * all zones including the zone itself. Each zone is referenced by 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * integer index. 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * b. Link (int, length 1). A link zone is an int resource. The 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * integer is the zone number of the target zone. The key of this 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * resource is an alternate name for the target zone. This data 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * is corresponding to Link data in the tz database. 9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2. Rules. These have keys corresponding to the Olson rule IDs, 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with an underscore prepended, e.g., "_EU". Each resource describes 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the behavior of the given rule using an intvector, containing the 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * onset list, the cessation list, and the DST savings. The onset and 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * cessation lists consist of the month, dowim, dow, time, and time 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * mode. The end result is that the 11 integers describing the rule 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * can be passed directly into the SimpleTimeZone 13-argument 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * constructor (the other two arguments will be the raw offset, taken 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * from the complex zone element 5, and the ID string, which is not 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * used), with the times and the DST savings multiplied by 1000 to 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * scale from seconds to milliseconds. 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 3. Regions. An array specifies mapping between zones and regions. 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Each item is either a 2-letter ISO country code or "001" 11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * (UN M.49 - World). This data is generated from "zone.tab" 11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * in the tz database. 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 11427f654740f2a26ad62a5c155af9199af9e69b889clairehoclass U_I18N_API OlsonTimeZone: public BasicTimeZone { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public: 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct from a resource bundle. 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param top the top-level zoneinfo resource bundle. This is used 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to lookup the rule that `res' may refer to, if there is one. 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param res the resource bundle of the zone to be constructed 121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @param tzid the time zone ID 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param ec input-output error code 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru OlsonTimeZone(const UResourceBundle* top, 125b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UResourceBundle* res, 126b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString& tzid, 127b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode& ec); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Copy constructor 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru OlsonTimeZone(const OlsonTimeZone& other); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Destructor 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~OlsonTimeZone(); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Assignment operator 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru OlsonTimeZone& operator=(const OlsonTimeZone& other); 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns true if the two TimeZone objects are equal. 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UBool operator==(const TimeZone& other) const; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual TimeZone* clone() const; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 15727f654740f2a26ad62a5c155af9199af9e69b889claireho static UClassID U_EXPORT2 getStaticClassID(); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UClassID getDynamicClassID() const; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. Do not call this; prefer getOffset(UDate,...). 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t day, uint8_t dayOfWeek, 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t millis, UErrorCode& ec) const; 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. Do not call this; prefer getOffset(UDate,...). 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t day, uint8_t dayOfWeek, 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t millis, int32_t monthLength, 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& ec) const; 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t& dstOffset, UErrorCode& ec) const; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * BasicTimeZone API. 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, 1898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) const; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. This method has no effect since objects of this 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * class are quasi-immutable (the base class allows the ID to be 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * changed). 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void setRawOffset(int32_t offsetMillis); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. For a historical zone, the raw offset can change 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * over time, so this API is not useful. In order to approximate 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * expected behavior, this method returns the raw offset for the 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * current moment in time. 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual int32_t getRawOffset() const; 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. For a historical zone, whether DST is used or 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * not varies over time. In order to approximate expected 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behavior, this method returns TRUE if DST is observed at any 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * point in the current year. 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UBool useDaylightTime() const; 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UBool inDaylightTime(UDate date, UErrorCode& ec) const; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual int32_t getDSTSavings() const; 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TimeZone API. Also comare historic transitions. 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UBool hasSameRules(const TimeZone& other) const; 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * BasicTimeZone API. 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Gets the first time zone transition after the base time. 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param base The base time. 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param inclusive Whether the base time is inclusive or not. 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param result Receives the first transition after the base time. 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return TRUE if the transition is found. 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * BasicTimeZone API. 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Gets the most recent time zone transition before the base time. 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param base The base time. 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param inclusive Whether the base time is inclusive or not. 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param result Receives the most recent transition before the base time. 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return TRUE if the transition is found. 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * BasicTimeZone API. 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns the number of <code>TimeZoneRule</code>s which represents time transitions, 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for this time zone, that is, all <code>TimeZoneRule</code>s for this time zone except 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>InitialTimeZoneRule</code>. The return value range is 0 or any positive value. 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Receives error status code. 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return The number of <code>TimeZoneRule</code>s representing time transitions. 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius virtual int32_t countTransitionRules(UErrorCode& status) const; 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code> 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * which represent time transitions for this time zone. On successful return, 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the argument initial points to non-NULL <code>InitialTimeZoneRule</code> and 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the array trsrules is filled with 0 or multiple <code>TimeZoneRule</code> 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * instances up to the size specified by trscount. The results are referencing the 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * rule instance held by this time zone instance. Therefore, after this time zone 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is destructed, they are no longer available. 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param initial Receives the initial timezone rule 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trsrules Receives the timezone transition rules 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param trscount On input, specify the size of the array 'transitions' receiving 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the timezone transition rules. On output, actual number of 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * rules filled in the array will be set. 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Receives error status code. 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, 2758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 277b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /** 278b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Internal API returning the canonical ID of this zone. 279b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * This ID won't be affected by setID(). 280b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 281b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UChar *getCanonicalID() const; 282b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Default constructor. Creates a time zone with an empty ID and 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a fixed GMT offset of zero. 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru OlsonTimeZone(); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void constructEmpty(); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void getHistoricalOffset(UDate date, UBool local, 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt, 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t& rawoff, int32_t& dstoff) const; 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t transitionCount() const; 29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t transitionTimeInSeconds(int16_t transIdx) const; 30150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double transitionTime(int16_t transIdx) const; 30250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* 30450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Following 3 methods return an offset at the given transition time index. 30550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * When the index is negative, return the initial offset. 30650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 30750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t zoneOffsetAt(int16_t transIdx) const; 30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t rawOffsetAt(int16_t transIdx) const; 30950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t dstOffsetAt(int16_t transIdx) const; 31050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 31150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* 31250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Following methods return the initial offset. 31350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 31450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t initialRawOffset() const; 31550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t initialDstOffset() const; 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 31850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Number of transitions in each time range 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t transitionCountPre32; 32150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t transitionCount32; 32250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t transitionCountPost32; 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Time of each transition in seconds from 1970 epoch before 32bit second range (<= 1900). 32650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Each transition in this range is represented by a pair of int32_t. 32750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Length is transitionCount int32_t's. NULL if no transitions in this range. 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 32950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const int32_t *transitionTimesPre32; // alias into res; do not delete 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 33250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Time of each transition in seconds from 1970 epoch in 32bit second range. 33350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Length is transitionCount int32_t's. NULL if no transitions in this range. 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const int32_t *transitionTimes32; // alias into res; do not delete 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 33750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 33850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Time of each transition in seconds from 1970 epoch after 32bit second range (>= 2038). 33950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Each transition in this range is represented by a pair of int32_t. 34050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Length is transitionCount int32_t's. NULL if no transitions in this range. 34150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 34250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const int32_t *transitionTimesPost32; // alias into res; do not delete 34350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 34450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 34550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Number of types, 1..255 34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 34750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t typeCount; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Offset from GMT in seconds for each type. 35150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Length is typeCount int32_t's. At least one type (a pair of int32_t) 35250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * is required. 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const int32_t *typeOffsets; // alias into res; do not delete 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Type description data, consisting of transitionCount uint8_t 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * type indices (from 0..typeCount-1). 35950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Length is transitionCount int16_t's. NULL if no transitions. 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const uint8_t *typeMapData; // alias into res; do not delete 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 36450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * A SimpleTimeZone that governs the behavior for date >= finalMillis. 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 36650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho SimpleTimeZone *finalZone; // owned, may be NULL 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 36950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * For date >= finalMillis, the finalZone will be used. 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 37150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double finalStartMillis; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 37450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * For year >= finalYear, the finalZone will be used. 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 37650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t finalStartYear; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 378b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* 379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Canonical (CLDR) ID of this zone 380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 381b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UChar *canonicalID; 382b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* BasicTimeZone support */ 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void clearTransitionRules(void); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void deleteTransitionRules(void); 3868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void checkTransitionRules(UErrorCode& status) const; 38759d709d503bab6e2b61931737e662dd293b40578ccornelius 38859d709d503bab6e2b61931737e662dd293b40578ccornelius public: // Internal, for access from plain C code 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void initTransitionRules(UErrorCode& status); 39059d709d503bab6e2b61931737e662dd293b40578ccornelius private: 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru InitialTimeZoneRule *initialRule; 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZoneTransition *firstTZTransition; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int16_t firstTZTransitionIdx; 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZoneTransition *firstFinalTZTransition; 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeArrayTimeZoneRule **historicRules; 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int16_t historicRuleCount; 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleTimeZone *finalZoneWithStartYear; // hack 39959d709d503bab6e2b61931737e662dd293b40578ccornelius UInitOnce transitionRulesInitOnce; 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int16_t 40350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoOlsonTimeZone::transitionCount() const { 40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return transitionCountPre32 + transitionCount32 + transitionCountPost32; 40550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 40750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline double 40850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoOlsonTimeZone::transitionTime(int16_t transIdx) const { 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (double)transitionTimeInSeconds(transIdx) * U_MILLIS_PER_SECOND; 41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 41150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int32_t 41350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoOlsonTimeZone::zoneOffsetAt(int16_t transIdx) const { 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t typeIdx = (transIdx >= 0 ? typeMapData[transIdx] : 0) << 1; 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return typeOffsets[typeIdx] + typeOffsets[typeIdx + 1]; 41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int32_t 41950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoOlsonTimeZone::rawOffsetAt(int16_t transIdx) const { 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t typeIdx = (transIdx >= 0 ? typeMapData[transIdx] : 0) << 1; 42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return typeOffsets[typeIdx]; 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline int32_t 42550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoOlsonTimeZone::dstOffsetAt(int16_t transIdx) const { 42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int16_t typeIdx = (transIdx >= 0 ? typeMapData[transIdx] : 0) << 1; 42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return typeOffsets[typeIdx + 1]; 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline int32_t 43150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoOlsonTimeZone::initialRawOffset() const { 43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return typeOffsets[0]; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline int32_t 43650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoOlsonTimeZone::initialDstOffset() const { 43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return typeOffsets[1]; 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 440b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoinline const UChar* 441b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoOlsonTimeZone::getCanonicalID() const { 442b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return canonicalID; 443b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 444b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 445b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // !UCONFIG_NO_FORMATTING 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // OLSONTZ_H 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 452