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 static constexpr int32_t kStdDstMask = kDaylight;
00197 static constexpr int32_t kFormerLatterMask = kLatter;
00198 #endif
00199
00204 BasicTimeZone();
00205
00211 BasicTimeZone(const UnicodeString &id);
00212
00218 BasicTimeZone(const BasicTimeZone& source);
00219
00224 BasicTimeZone& operator=(const BasicTimeZone&) = default;
00225
00236 void getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UVector*& transitionRules,
00237 UErrorCode& status) const;
00238 };
00239
00240 U_NAMESPACE_END
00241
00242 #endif
00243
00244 #endif
00245
00246 #endif // BASICTZ_H
00247
00248