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
00028
00029 #ifndef TIMEZONE_H
00030 #define TIMEZONE_H
00031
00032 #include "unicode/utypes.h"
00033
00039 #if !UCONFIG_NO_FORMATTING
00040
00041 #include "unicode/uobject.h"
00042 #include "unicode/unistr.h"
00043 #include "unicode/ures.h"
00044 #include "unicode/ucal.h"
00045
00046 U_NAMESPACE_BEGIN
00047
00048 class StringEnumeration;
00049
00131 class U_I18N_API TimeZone : public UObject {
00132 public:
00136 virtual ~TimeZone();
00137
00150 static const TimeZone& U_EXPORT2 getUnknown();
00151
00164 static const TimeZone* U_EXPORT2 getGMT(void);
00165
00177 static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID);
00178
00194 static StringEnumeration* U_EXPORT2 createTimeZoneIDEnumeration(
00195 USystemTimeZoneType zoneType,
00196 const char* region,
00197 const int32_t* rawOffset,
00198 UErrorCode& ec);
00199
00207 static StringEnumeration* U_EXPORT2 createEnumeration();
00208
00226 static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
00227
00238 static StringEnumeration* U_EXPORT2 createEnumeration(const char* country);
00239
00254 static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id);
00255
00275 static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
00276 int32_t index);
00277
00301 static TimeZone* U_EXPORT2 detectHostTimeZone();
00302
00316 static TimeZone* U_EXPORT2 createDefault(void);
00317
00331 static void U_EXPORT2 adoptDefault(TimeZone* zone);
00332
00333 #ifndef U_HIDE_SYSTEM_API
00334
00344 static void U_EXPORT2 setDefault(const TimeZone& zone);
00345 #endif
00346
00353 static const char* U_EXPORT2 getTZDataVersion(UErrorCode& status);
00354
00368 static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
00369 UnicodeString& canonicalID, UErrorCode& status);
00370
00386 static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
00387 UnicodeString& canonicalID, UBool& isSystemID, UErrorCode& status);
00388
00411 static UnicodeString& U_EXPORT2 getWindowsID(const UnicodeString& id,
00412 UnicodeString& winid, UErrorCode& status);
00413
00440 static UnicodeString& U_EXPORT2 getIDForWindowsID(const UnicodeString& winid, const char* region,
00441 UnicodeString& id, UErrorCode& status);
00442
00452 virtual UBool operator==(const TimeZone& that) const;
00453
00463 UBool operator!=(const TimeZone& that) const {return !operator==(that);}
00464
00489 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00490 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const = 0;
00491
00512 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00513 uint8_t dayOfWeek, int32_t milliseconds,
00514 int32_t monthLength, UErrorCode& status) const = 0;
00515
00539 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00540 int32_t& dstOffset, UErrorCode& ec) const;
00541
00549 virtual void setRawOffset(int32_t offsetMillis) = 0;
00550
00558 virtual int32_t getRawOffset(void) const = 0;
00559
00567 UnicodeString& getID(UnicodeString& ID) const;
00568
00582 void setID(const UnicodeString& ID);
00583
00588 enum EDisplayType {
00593 SHORT = 1,
00598 LONG,
00603 SHORT_GENERIC,
00608 LONG_GENERIC,
00614 SHORT_GMT,
00620 LONG_GMT,
00626 SHORT_COMMONLY_USED,
00632 GENERIC_LOCATION
00633 };
00634
00646 UnicodeString& getDisplayName(UnicodeString& result) const;
00647
00661 UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const;
00662
00675 UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, UnicodeString& result) const;
00676
00691 UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, const Locale& locale, UnicodeString& result) const;
00692
00727 virtual UBool useDaylightTime(void) const = 0;
00728
00742 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const = 0;
00743
00752 virtual UBool hasSameRules(const TimeZone& other) const;
00753
00761 virtual TimeZone* clone(void) const = 0;
00762
00769 static UClassID U_EXPORT2 getStaticClassID(void);
00770
00782 virtual UClassID getDynamicClassID(void) const = 0;
00783
00799 virtual int32_t getDSTSavings() const;
00800
00818 static int32_t U_EXPORT2 getRegion(const UnicodeString& id,
00819 char *region, int32_t capacity, UErrorCode& status);
00820
00821 protected:
00822
00827 TimeZone();
00828
00834 TimeZone(const UnicodeString &id);
00835
00841 TimeZone(const TimeZone& source);
00842
00848 TimeZone& operator=(const TimeZone& right);
00849
00850 #ifndef U_HIDE_INTERNAL_API
00851
00860 static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status);
00861 #endif
00862
00863 private:
00864 friend class ZoneMeta;
00865
00866
00867 static TimeZone* createCustomTimeZone(const UnicodeString&);
00868
00877 static const char16_t* findID(const UnicodeString& id);
00878
00887 static const char16_t* dereferOlsonLink(const UnicodeString& id);
00888
00895 static const char16_t* getRegion(const UnicodeString& id);
00896
00897 public:
00898 #ifndef U_HIDE_INTERNAL_API
00899
00907 static const char16_t* getRegion(const UnicodeString& id, UErrorCode& status);
00908 #endif
00909
00910 private:
00921 static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour,
00922 int32_t& minute, int32_t& second);
00923
00934 static UnicodeString& getCustomID(const UnicodeString& id, UnicodeString& normalized,
00935 UErrorCode& status);
00936
00946 static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec,
00947 UBool negative, UnicodeString& id);
00948
00949 UnicodeString fID;
00950
00951 friend class TZEnumeration;
00952 };
00953
00954
00955
00956
00957 inline UnicodeString&
00958 TimeZone::getID(UnicodeString& ID) const
00959 {
00960 ID = fID;
00961 return ID;
00962 }
00963
00964
00965
00966 inline void
00967 TimeZone::setID(const UnicodeString& ID)
00968 {
00969 fID = ID;
00970 }
00971 U_NAMESPACE_END
00972
00973 #endif
00974
00975 #endif //_TIMEZONE
00976