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 static VTimeZone* createVTimeZone(VTZReader* reader);
00386 void write(VTZWriter& writer, UErrorCode& status) const;
00387 void write(UDate start, VTZWriter& writer, UErrorCode& status) const;
00388 void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const;
00389 void load(VTZReader& reader, UErrorCode& status);
00390 void parse(UErrorCode& status);
00391
00392 void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
00393 UErrorCode& status) const;
00394
00395 void writeHeaders(VTZWriter& w, UErrorCode& status) const;
00396 void writeFooter(VTZWriter& writer, UErrorCode& status) const;
00397
00398 void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00399 int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
00400 UErrorCode& status) const;
00401 void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00402 int32_t fromOffset, int32_t toOffset,
00403 int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
00404 UErrorCode& status) const;
00405 void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00406 int32_t fromOffset, int32_t toOffset,
00407 int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
00408 UDate startTime, UDate untilTime, UErrorCode& status) const;
00409 void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00410 int32_t fromOffset, int32_t toOffset,
00411 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00412 UDate startTime, UDate untilTime, UErrorCode& status) const;
00413 void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
00414 int32_t dayOfWeek, int32_t numDays,
00415 UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
00416 void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00417 int32_t fromOffset, int32_t toOffset,
00418 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00419 UDate startTime, UDate untilTime, UErrorCode& status) const;
00420 void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
00421 int32_t fromRawOffset, int32_t fromDSTSavings,
00422 UDate startTime, UErrorCode& status) const;
00423
00424 void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00425 int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
00426 void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
00427 void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
00428 void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
00429
00430 BasicTimeZone *tz;
00431 UVector *vtzlines;
00432 UnicodeString tzurl;
00433 UDate lastmod;
00434 UnicodeString olsonzid;
00435 UnicodeString icutzver;
00436
00437 public:
00449 static UClassID U_EXPORT2 getStaticClassID(void);
00450
00462 virtual UClassID getDynamicClassID(void) const override;
00463 };
00464
00465 U_NAMESPACE_END
00466
00467 #endif
00468
00469 #endif
00470
00471 #endif // VTZONE_H
00472