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
00034 #if U_SHOW_CPLUSPLUS_API
00035
00041 #if !UCONFIG_NO_FORMATTING
00042
00043 #include "unicode/uobject.h"
00044 #include "unicode/unistr.h"
00045 #include "unicode/ures.h"
00046 #include "unicode/ucal.h"
00047
00048 U_NAMESPACE_BEGIN
00049
00050 class StringEnumeration;
00051
00133 class U_I18N_API TimeZone : public UObject {
00134 public:
00138 virtual ~TimeZone();
00139
00152 static const TimeZone& U_EXPORT2 getUnknown();
00153
00166 static const TimeZone* U_EXPORT2 getGMT(void);
00167
00179 static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID);
00180
00196 static StringEnumeration* U_EXPORT2 createTimeZoneIDEnumeration(
00197 USystemTimeZoneType zoneType,
00198 const char* region,
00199 const int32_t* rawOffset,
00200 UErrorCode& ec);
00201
00209 static StringEnumeration* U_EXPORT2 createEnumeration();
00210
00228 static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
00229
00240 static StringEnumeration* U_EXPORT2 createEnumeration(const char* country);
00241
00256 static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id);
00257
00277 static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
00278 int32_t index);
00279
00303 static TimeZone* U_EXPORT2 detectHostTimeZone();
00304
00318 static TimeZone* U_EXPORT2 createDefault(void);
00319
00329 static void U_EXPORT2 adoptDefault(TimeZone* zone);
00330
00331 #ifndef U_HIDE_SYSTEM_API
00332
00340 static void U_EXPORT2 setDefault(const TimeZone& zone);
00341 #endif
00342
00349 static const char* U_EXPORT2 getTZDataVersion(UErrorCode& status);
00350
00364 static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
00365 UnicodeString& canonicalID, UErrorCode& status);
00366
00382 static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
00383 UnicodeString& canonicalID, UBool& isSystemID, UErrorCode& status);
00384
00407 static UnicodeString& U_EXPORT2 getWindowsID(const UnicodeString& id,
00408 UnicodeString& winid, UErrorCode& status);
00409
00436 static UnicodeString& U_EXPORT2 getIDForWindowsID(const UnicodeString& winid, const char* region,
00437 UnicodeString& id, UErrorCode& status);
00438
00448 virtual UBool operator==(const TimeZone& that) const;
00449
00459 UBool operator!=(const TimeZone& that) const {return !operator==(that);}
00460
00485 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00486 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const = 0;
00487
00508 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00509 uint8_t dayOfWeek, int32_t milliseconds,
00510 int32_t monthLength, UErrorCode& status) const = 0;
00511
00535 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00536 int32_t& dstOffset, UErrorCode& ec) const;
00537
00545 virtual void setRawOffset(int32_t offsetMillis) = 0;
00546
00554 virtual int32_t getRawOffset(void) const = 0;
00555
00563 UnicodeString& getID(UnicodeString& ID) const;
00564
00578 void setID(const UnicodeString& ID);
00579
00584 enum EDisplayType {
00589 SHORT = 1,
00594 LONG,
00599 SHORT_GENERIC,
00604 LONG_GENERIC,
00610 SHORT_GMT,
00616 LONG_GMT,
00622 SHORT_COMMONLY_USED,
00628 GENERIC_LOCATION
00629 };
00630
00642 UnicodeString& getDisplayName(UnicodeString& result) const;
00643
00657 UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const;
00658
00671 UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, UnicodeString& result) const;
00672
00687 UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, const Locale& locale, UnicodeString& result) const;
00688
00723 virtual UBool useDaylightTime(void) const = 0;
00724
00725 #ifndef U_FORCE_HIDE_DEPRECATED_API
00726
00739 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const = 0;
00740 #endif // U_FORCE_HIDE_DEPRECATED_API
00741
00750 virtual UBool hasSameRules(const TimeZone& other) const;
00751
00759 virtual TimeZone* clone() const = 0;
00760
00767 static UClassID U_EXPORT2 getStaticClassID(void);
00768
00780 virtual UClassID getDynamicClassID(void) const = 0;
00781
00797 virtual int32_t getDSTSavings() const;
00798
00816 static int32_t U_EXPORT2 getRegion(const UnicodeString& id,
00817 char *region, int32_t capacity, UErrorCode& status);
00818
00819 protected:
00820
00825 TimeZone();
00826
00832 TimeZone(const UnicodeString &id);
00833
00839 TimeZone(const TimeZone& source);
00840
00846 TimeZone& operator=(const TimeZone& right);
00847
00848 #ifndef U_HIDE_INTERNAL_API
00849
00858 static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status);
00859 #endif
00860
00861 private:
00862 friend class ZoneMeta;
00863
00864
00865 static TimeZone* createCustomTimeZone(const UnicodeString&);
00866
00875 static const char16_t* findID(const UnicodeString& id);
00876
00885 static const char16_t* dereferOlsonLink(const UnicodeString& id);
00886
00893 static const char16_t* getRegion(const UnicodeString& id);
00894
00895 public:
00896 #ifndef U_HIDE_INTERNAL_API
00897
00905 static const char16_t* getRegion(const UnicodeString& id, UErrorCode& status);
00906 #endif
00907
00908 private:
00919 static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour,
00920 int32_t& minute, int32_t& second);
00921
00932 static UnicodeString& getCustomID(const UnicodeString& id, UnicodeString& normalized,
00933 UErrorCode& status);
00934
00944 static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec,
00945 UBool negative, UnicodeString& id);
00946
00947 UnicodeString fID;
00948
00949 friend class TZEnumeration;
00950 };
00951
00952
00953
00954
00955 inline UnicodeString&
00956 TimeZone::getID(UnicodeString& ID) const
00957 {
00958 ID = fID;
00959 return ID;
00960 }
00961
00962
00963
00964 inline void
00965 TimeZone::setID(const UnicodeString& ID)
00966 {
00967 fID = ID;
00968 }
00969 U_NAMESPACE_END
00970
00971 #endif
00972
00973 #endif
00974
00975 #endif //_TIMEZONE
00976