00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef TIMEZONE_H
00028 #define TIMEZONE_H
00029
00030 #include "unicode/utypes.h"
00031
00037 #if !UCONFIG_NO_FORMATTING
00038
00039 #include "unicode/uobject.h"
00040 #include "unicode/unistr.h"
00041 #include "unicode/ures.h"
00042 #include "unicode/ucal.h"
00043
00044 U_NAMESPACE_BEGIN
00045
00046 class StringEnumeration;
00047
00129 class U_I18N_API TimeZone : public UObject {
00130 public:
00134 virtual ~TimeZone();
00135
00148 static const TimeZone& U_EXPORT2 getUnknown();
00149
00162 static const TimeZone* U_EXPORT2 getGMT(void);
00163
00175 static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID);
00176
00192 static StringEnumeration* U_EXPORT2 createTimeZoneIDEnumeration(
00193 USystemTimeZoneType zoneType,
00194 const char* region,
00195 const int32_t* rawOffset,
00196 UErrorCode& ec);
00197
00205 static StringEnumeration* U_EXPORT2 createEnumeration();
00206
00224 static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
00225
00236 static StringEnumeration* U_EXPORT2 createEnumeration(const char* country);
00237
00252 static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id);
00253
00273 static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
00274 int32_t index);
00275
00289 static TimeZone* U_EXPORT2 detectHostTimeZone();
00290
00303 static TimeZone* U_EXPORT2 createDefault(void);
00304
00318 static void U_EXPORT2 adoptDefault(TimeZone* zone);
00319
00320 #ifndef U_HIDE_SYSTEM_API
00321
00331 static void U_EXPORT2 setDefault(const TimeZone& zone);
00332 #endif
00333
00340 static const char* U_EXPORT2 getTZDataVersion(UErrorCode& status);
00341
00355 static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
00356 UnicodeString& canonicalID, UErrorCode& status);
00357
00373 static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
00374 UnicodeString& canonicalID, UBool& isSystemID, UErrorCode& status);
00375
00398 static UnicodeString& U_EXPORT2 getWindowsID(const UnicodeString& id,
00399 UnicodeString& winid, UErrorCode& status);
00400
00427 static UnicodeString& U_EXPORT2 getIDForWindowsID(const UnicodeString& winid, const char* region,
00428 UnicodeString& id, UErrorCode& status);
00429
00439 virtual UBool operator==(const TimeZone& that) const;
00440
00450 UBool operator!=(const TimeZone& that) const {return !operator==(that);}
00451
00476 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00477 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const = 0;
00478
00499 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00500 uint8_t dayOfWeek, int32_t milliseconds,
00501 int32_t monthLength, UErrorCode& status) const = 0;
00502
00526 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00527 int32_t& dstOffset, UErrorCode& ec) const;
00528
00536 virtual void setRawOffset(int32_t offsetMillis) = 0;
00537
00545 virtual int32_t getRawOffset(void) const = 0;
00546
00554 UnicodeString& getID(UnicodeString& ID) const;
00555
00569 void setID(const UnicodeString& ID);
00570
00575 enum EDisplayType {
00580 SHORT = 1,
00585 LONG,
00590 SHORT_GENERIC,
00595 LONG_GENERIC,
00601 SHORT_GMT,
00607 LONG_GMT,
00613 SHORT_COMMONLY_USED,
00619 GENERIC_LOCATION
00620 };
00621
00633 UnicodeString& getDisplayName(UnicodeString& result) const;
00634
00648 UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const;
00649
00662 UnicodeString& getDisplayName(UBool daylight, EDisplayType style, UnicodeString& result) const;
00663
00678 UnicodeString& getDisplayName(UBool daylight, EDisplayType style, const Locale& locale, UnicodeString& result) const;
00679
00714 virtual UBool useDaylightTime(void) const = 0;
00715
00729 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const = 0;
00730
00739 virtual UBool hasSameRules(const TimeZone& other) const;
00740
00748 virtual TimeZone* clone(void) const = 0;
00749
00756 static UClassID U_EXPORT2 getStaticClassID(void);
00757
00769 virtual UClassID getDynamicClassID(void) const = 0;
00770
00786 virtual int32_t getDSTSavings() const;
00787
00805 static int32_t U_EXPORT2 getRegion(const UnicodeString& id,
00806 char *region, int32_t capacity, UErrorCode& status);
00807
00808 protected:
00809
00814 TimeZone();
00815
00821 TimeZone(const UnicodeString &id);
00822
00828 TimeZone(const TimeZone& source);
00829
00835 TimeZone& operator=(const TimeZone& right);
00836
00837 #ifndef U_HIDE_INTERNAL_API
00838
00847 static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status);
00848 #endif
00849
00850 private:
00851 friend class ZoneMeta;
00852
00853
00854 static TimeZone* createCustomTimeZone(const UnicodeString&);
00855
00864 static const UChar* findID(const UnicodeString& id);
00865
00874 static const UChar* dereferOlsonLink(const UnicodeString& id);
00875
00882 static const UChar* getRegion(const UnicodeString& id);
00883
00884 public:
00885 #ifndef U_HIDE_INTERNAL_API
00886
00894 static const UChar* getRegion(const UnicodeString& id, UErrorCode& status);
00895 #endif
00896
00897 private:
00908 static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour,
00909 int32_t& minute, int32_t& second);
00910
00921 static UnicodeString& getCustomID(const UnicodeString& id, UnicodeString& normalized,
00922 UErrorCode& status);
00923
00933 static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec,
00934 UBool negative, UnicodeString& id);
00935
00936 UnicodeString fID;
00937
00938 friend class TZEnumeration;
00939 };
00940
00941
00942
00943
00944 inline UnicodeString&
00945 TimeZone::getID(UnicodeString& ID) const
00946 {
00947 ID = fID;
00948 return ID;
00949 }
00950
00951
00952
00953 inline void
00954 TimeZone::setID(const UnicodeString& ID)
00955 {
00956 fID = ID;
00957 }
00958 U_NAMESPACE_END
00959
00960 #endif
00961
00962 #endif //_TIMEZONE
00963