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 override = 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
00159 virtual void getOffsetFromLocal(
00160 UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
00161 UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffset,
00162 int32_t& dstOffset, UErrorCode& status) const;
00163
00164
00165 #ifndef U_HIDE_INTERNAL_API
00166
00170 enum {
00171 kStandard = 0x01,
00172 kDaylight = 0x03,
00173 kFormer = 0x04,
00174 kLatter = 0x0C
00175 };
00176
00181 void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
00182 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
00183 #endif
00184
00185 protected:
00186
00187 #ifndef U_HIDE_INTERNAL_API
00188
00192 enum {
00193 kStdDstMask = kDaylight,
00194 kFormerLatterMask = kLatter
00195 };
00196 #endif
00197
00202 BasicTimeZone();
00203
00209 BasicTimeZone(const UnicodeString &id);
00210
00216 BasicTimeZone(const BasicTimeZone& source);
00217
00222 BasicTimeZone& operator=(const BasicTimeZone&) = default;
00223
00234 void getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UVector*& transitionRules,
00235 UErrorCode& status) const;
00236 };
00237
00238 U_NAMESPACE_END
00239
00240 #endif
00241
00242 #endif
00243
00244 #endif // BASICTZ_H
00245
00246