00001
00002
00003
00004
00005
00006
00007 #ifndef RBTZ_H
00008 #define RBTZ_H
00009
00010 #include "unicode/utypes.h"
00011
00017 #if !UCONFIG_NO_FORMATTING
00018
00019 #include "unicode/basictz.h"
00020 #include "unicode/unistr.h"
00021
00022 U_NAMESPACE_BEGIN
00023
00024
00025 class UVector;
00026
00027 class U_I18N_API RuleBasedTimeZone : public BasicTimeZone {
00028 public:
00038 RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule);
00039
00045 RuleBasedTimeZone(const RuleBasedTimeZone& source);
00046
00051 virtual ~RuleBasedTimeZone();
00052
00058 RuleBasedTimeZone& operator=(const RuleBasedTimeZone& right);
00059
00068 virtual UBool operator==(const TimeZone& that) const;
00069
00078 virtual UBool operator!=(const TimeZone& that) const;
00079
00095 void addTransitionRule(TimeZoneRule* rule, UErrorCode& status);
00096
00106 void complete(UErrorCode& status);
00107
00115 virtual TimeZone* clone(void) const;
00116
00141 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00142 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
00143
00163 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00164 uint8_t dayOfWeek, int32_t millis,
00165 int32_t monthLength, UErrorCode& status) const;
00166
00189 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00190 int32_t& dstOffset, UErrorCode& ec) const;
00191
00199 virtual void setRawOffset(int32_t offsetMillis);
00200
00208 virtual int32_t getRawOffset(void) const;
00209
00216 virtual UBool useDaylightTime(void) const;
00217
00231 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00232
00241 virtual UBool hasSameRules(const TimeZone& other) const;
00242
00251 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) ;
00252
00261 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) ;
00262
00271 virtual int32_t countTransitionRules(UErrorCode& status) ;
00272
00289 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
00290 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) ;
00291
00292 private:
00293 void deleteRules(void);
00294 void deleteTransitions(void);
00295 UVector* copyRules(UVector* source);
00296 TimeZoneRule* findRuleInFinal(UDate date, UBool local) const;
00297 UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
00298 UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
00299
00300 InitialTimeZoneRule *fInitialRule;
00301 UVector *fHistoricRules;
00302 UVector *fFinalRules;
00303 UVector *fHistoricTransitions;
00304 UBool fUpToDate;
00305
00306 public:
00318 static UClassID U_EXPORT2 getStaticClassID(void);
00319
00331 virtual UClassID getDynamicClassID(void) const;
00332 };
00333
00334 U_NAMESPACE_END
00335
00336 #endif
00337
00338 #endif // RBTZ_H
00339
00340