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 #ifndef TIMEZONE_H
00027 #define TIMEZONE_H
00028
00029 #include "unicode/utypes.h"
00030
00036 #if !UCONFIG_NO_FORMATTING
00037
00038 #include "unicode/uobject.h"
00039 #include "unicode/unistr.h"
00040 #include "unicode/ures.h"
00041
00042 U_NAMESPACE_BEGIN
00043
00044 class StringEnumeration;
00045
00121 class U_I18N_API TimeZone : public UObject {
00122 public:
00126 virtual ~TimeZone();
00127
00134 static const TimeZone* U_EXPORT2 getGMT(void);
00135
00147 static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID);
00148
00156 static StringEnumeration* U_EXPORT2 createEnumeration();
00157
00175 static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
00176
00187 static StringEnumeration* U_EXPORT2 createEnumeration(const char* country);
00188
00189 #ifdef U_USE_TIMEZONE_OBSOLETE_2_8
00190
00213 static const UnicodeString** createAvailableIDs(int32_t rawOffset, int32_t& numIDs);
00214
00236 static const UnicodeString** createAvailableIDs(const char* country,
00237 int32_t& numIDs);
00238
00252 static const UnicodeString** createAvailableIDs(int32_t& numIDs);
00253 #endif
00254
00269 static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id);
00270
00290 static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
00291 int32_t index);
00292
00305 static TimeZone* U_EXPORT2 createDefault(void);
00306
00316 static void U_EXPORT2 adoptDefault(TimeZone* zone);
00317
00325 static void U_EXPORT2 setDefault(const TimeZone& zone);
00326
00336 virtual UBool operator==(const TimeZone& that) const;
00337
00347 UBool operator!=(const TimeZone& that) const {return !operator==(that);}
00348
00373 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00374 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const = 0;
00375
00396 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00397 uint8_t dayOfWeek, int32_t milliseconds,
00398 int32_t monthLength, UErrorCode& status) const = 0;
00399
00423 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00424 int32_t& dstOffset, UErrorCode& ec) const;
00425
00433 virtual void setRawOffset(int32_t offsetMillis) = 0;
00434
00442 virtual int32_t getRawOffset(void) const = 0;
00443
00451 UnicodeString& getID(UnicodeString& ID) const;
00452
00466 void setID(const UnicodeString& ID);
00467
00472 enum EDisplayType {
00477 SHORT = 1,
00482 LONG
00483 };
00484
00496 UnicodeString& getDisplayName(UnicodeString& result) const;
00497
00511 UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const;
00512
00525 UnicodeString& getDisplayName(UBool daylight, EDisplayType style, UnicodeString& result) const;
00526
00541 UnicodeString& getDisplayName(UBool daylight, EDisplayType style, const Locale& locale, UnicodeString& result) const;
00542
00549 virtual UBool useDaylightTime(void) const = 0;
00550
00564 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const = 0;
00565
00574 virtual UBool hasSameRules(const TimeZone& other) const;
00575
00583 virtual TimeZone* clone(void) const = 0;
00584
00591 static UClassID U_EXPORT2 getStaticClassID(void);
00592
00604 virtual UClassID getDynamicClassID(void) const = 0;
00605
00606 protected:
00607
00612 TimeZone();
00613
00619 TimeZone(const UnicodeString &id);
00620
00626 TimeZone(const TimeZone& source);
00627
00633 TimeZone& operator=(const TimeZone& right);
00634
00644 static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status);
00645
00646 private:
00647 static TimeZone* createCustomTimeZone(const UnicodeString&);
00648
00654 static void initDefault(void);
00655
00656
00664 static TimeZone* createSystemTimeZone(const UnicodeString& name);
00665
00666 UnicodeString fID;
00667 };
00668
00669
00670
00671
00672 inline UnicodeString&
00673 TimeZone::getID(UnicodeString& ID) const
00674 {
00675 ID = fID;
00676 return ID;
00677 }
00678
00679
00680
00681 inline void
00682 TimeZone::setID(const UnicodeString& ID)
00683 {
00684 fID = ID;
00685 }
00686 U_NAMESPACE_END
00687
00688 #endif
00689
00690 #endif //_TIMEZONE
00691