00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef BASICTZ_H
00010 #define BASICTZ_H
00011
00017 #include "unicode/utypes.h"
00018
00019 #if U_SHOW_CPLUSPLUS_API
00020
00021 #if !UCONFIG_NO_FORMATTING
00022
00023 #include "unicode/timezone.h"
00024 #include "unicode/tzrule.h"
00025 #include "unicode/tztrans.h"
00026
00027 U_NAMESPACE_BEGIN
00028
00029
00030 class UVector;
00031
00038 class U_I18N_API BasicTimeZone: public TimeZone {
00039 public:
00044 virtual ~BasicTimeZone();
00045
00052 virtual BasicTimeZone* clone() const = 0;
00053
00062 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0;
00063
00072 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0;
00073
00094 virtual UBool hasEquivalentTransitions(const BasicTimeZone& tz, UDate start, UDate end,
00095 UBool ignoreDstAmount, UErrorCode& ec) const;
00096
00105 virtual int32_t countTransitionRules(UErrorCode& status) const = 0;
00106
00123 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
00124 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const = 0;
00125
00152 virtual void getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial,
00153 AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) const;
00154
00155
00156 #ifndef U_HIDE_INTERNAL_API
00157
00161 enum {
00162 kStandard = 0x01,
00163 kDaylight = 0x03,
00164 kFormer = 0x04,
00165 kLatter = 0x0C
00166 };
00167 #endif
00168
00173 virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
00174 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
00175
00176 protected:
00177
00178 #ifndef U_HIDE_INTERNAL_API
00179
00183 enum {
00184 kStdDstMask = kDaylight,
00185 kFormerLatterMask = kLatter
00186 };
00187 #endif
00188
00193 BasicTimeZone();
00194
00200 BasicTimeZone(const UnicodeString &id);
00201
00207 BasicTimeZone(const BasicTimeZone& source);
00208
00216 void getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UVector*& transitionRules,
00217 UErrorCode& status) const;
00218 };
00219
00220 U_NAMESPACE_END
00221
00222 #endif
00223
00224 #endif
00225
00226 #endif // BASICTZ_H
00227
00228