00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef VTZONE_H
00010 #define VTZONE_H
00011
00012 #include "unicode/utypes.h"
00013
00014 #if U_SHOW_CPLUSPLUS_API
00015
00021 #if !UCONFIG_NO_FORMATTING
00022
00023 #include "unicode/basictz.h"
00024
00025 U_NAMESPACE_BEGIN
00026
00027 class VTZWriter;
00028 class VTZReader;
00029 class UVector;
00030
00045 class U_I18N_API VTimeZone : public BasicTimeZone {
00046 public:
00052 VTimeZone(const VTimeZone& source);
00053
00058 virtual ~VTimeZone();
00059
00065 VTimeZone& operator=(const VTimeZone& right);
00066
00075 virtual bool operator==(const TimeZone& that) const override;
00076
00085 virtual bool operator!=(const TimeZone& that) const;
00086
00094 static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
00095
00103 static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ,
00104 UErrorCode &status);
00105
00115 static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
00116
00125 UBool getTZURL(UnicodeString& url) const;
00126
00132 void setTZURL(const UnicodeString& url);
00133
00142 UBool getLastModified(UDate& lastModified) const;
00143
00149 void setLastModified(UDate lastModified);
00150
00157 void write(UnicodeString& result, UErrorCode& status) const;
00158
00167 void write(UDate start, UnicodeString& result, UErrorCode& status) const;
00168
00182 void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) const;
00183
00190 virtual VTimeZone* clone() const override;
00191
00216 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00217 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const override;
00218
00238 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00239 uint8_t dayOfWeek, int32_t millis,
00240 int32_t monthLength, UErrorCode& status) const override;
00241
00264 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00265 int32_t& dstOffset, UErrorCode& ec) const override;
00266
00271 virtual void getOffsetFromLocal(
00272 UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
00273 UTimeZoneLocalOption duplicatedTimeOpt,
00274 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
00275
00283 virtual void setRawOffset(int32_t offsetMillis) override;
00284
00292 virtual int32_t getRawOffset(void) const override;
00293
00300 virtual UBool useDaylightTime(void) const override;
00301
00302 #ifndef U_FORCE_HIDE_DEPRECATED_API
00303
00316 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override;
00317 #endif // U_FORCE_HIDE_DEPRECATED_API
00318
00327 virtual UBool hasSameRules(const TimeZone& other) const override;
00328
00337 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
00338
00347 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
00348
00357 virtual int32_t countTransitionRules(UErrorCode& status) const override;
00358
00375 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
00376 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
00377
00378 private:
00379 enum { DEFAULT_VTIMEZONE_LINES = 100 };
00380
00384 VTimeZone();
00385 void write(VTZWriter& writer, UErrorCode& status) const;
00386 void write(UDate start, VTZWriter& writer, UErrorCode& status) const;
00387 void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const;
00388 void load(VTZReader& reader, UErrorCode& status);
00389 void parse(UErrorCode& status);
00390
00391 void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
00392 UErrorCode& status) const;
00393
00394 void writeHeaders(VTZWriter& w, UErrorCode& status) const;
00395 void writeFooter(VTZWriter& writer, UErrorCode& status) const;
00396
00397 void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00398 int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
00399 UErrorCode& status) const;
00400 void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00401 int32_t fromOffset, int32_t toOffset,
00402 int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
00403 UErrorCode& status) const;
00404 void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00405 int32_t fromOffset, int32_t toOffset,
00406 int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
00407 UDate startTime, UDate untilTime, UErrorCode& status) const;
00408 void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00409 int32_t fromOffset, int32_t toOffset,
00410 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00411 UDate startTime, UDate untilTime, UErrorCode& status) const;
00412 void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
00413 int32_t dayOfWeek, int32_t numDays,
00414 UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
00415 void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00416 int32_t fromOffset, int32_t toOffset,
00417 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00418 UDate startTime, UDate untilTime, UErrorCode& status) const;
00419 void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
00420 int32_t fromRawOffset, int32_t fromDSTSavings,
00421 UDate startTime, UErrorCode& status) const;
00422
00423 void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00424 int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
00425 void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
00426 void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
00427 void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
00428
00429 BasicTimeZone *tz;
00430 UVector *vtzlines;
00431 UnicodeString tzurl;
00432 UDate lastmod;
00433 UnicodeString olsonzid;
00434 UnicodeString icutzver;
00435
00436 public:
00448 static UClassID U_EXPORT2 getStaticClassID(void);
00449
00461 virtual UClassID getDynamicClassID(void) const override;
00462 };
00463
00464 U_NAMESPACE_END
00465
00466 #endif
00467
00468 #endif
00469
00470 #endif // VTZONE_H
00471