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 UBool operator==(const TimeZone& that) const;
00076
00085 virtual UBool 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;
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;
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;
00241
00264 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00265 int32_t& dstOffset, UErrorCode& ec) const;
00266
00274 virtual void setRawOffset(int32_t offsetMillis);
00275
00283 virtual int32_t getRawOffset(void) const;
00284
00291 virtual UBool useDaylightTime(void) const;
00292
00293 #ifndef U_FORCE_HIDE_DEPRECATED_API
00294
00307 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00308 #endif // U_FORCE_HIDE_DEPRECATED_API
00309
00318 virtual UBool hasSameRules(const TimeZone& other) const;
00319
00328 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
00329
00338 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
00339
00348 virtual int32_t countTransitionRules(UErrorCode& status) const;
00349
00366 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
00367 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
00368
00369 private:
00370 enum { DEFAULT_VTIMEZONE_LINES = 100 };
00371
00375 VTimeZone();
00376 static VTimeZone* createVTimeZone(VTZReader* reader);
00377 void write(VTZWriter& writer, UErrorCode& status) const;
00378 void write(UDate start, VTZWriter& writer, UErrorCode& status) const;
00379 void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const;
00380 void load(VTZReader& reader, UErrorCode& status);
00381 void parse(UErrorCode& status);
00382
00383 void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
00384 UErrorCode& status) const;
00385
00386 void writeHeaders(VTZWriter& w, UErrorCode& status) const;
00387 void writeFooter(VTZWriter& writer, UErrorCode& status) const;
00388
00389 void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00390 int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
00391 UErrorCode& status) const;
00392 void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00393 int32_t fromOffset, int32_t toOffset,
00394 int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
00395 UErrorCode& status) const;
00396 void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00397 int32_t fromOffset, int32_t toOffset,
00398 int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
00399 UDate startTime, UDate untilTime, UErrorCode& status) const;
00400 void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00401 int32_t fromOffset, int32_t toOffset,
00402 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00403 UDate startTime, UDate untilTime, UErrorCode& status) const;
00404 void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
00405 int32_t dayOfWeek, int32_t numDays,
00406 UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
00407 void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00408 int32_t fromOffset, int32_t toOffset,
00409 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00410 UDate startTime, UDate untilTime, UErrorCode& status) const;
00411 void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
00412 int32_t fromRawOffset, int32_t fromDSTSavings,
00413 UDate startTime, UErrorCode& status) const;
00414
00415 void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00416 int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
00417 void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
00418 void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
00419 void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
00420
00421 BasicTimeZone *tz;
00422 UVector *vtzlines;
00423 UnicodeString tzurl;
00424 UDate lastmod;
00425 UnicodeString olsonzid;
00426 UnicodeString icutzver;
00427
00428 public:
00440 static UClassID U_EXPORT2 getStaticClassID(void);
00441
00453 virtual UClassID getDynamicClassID(void) const;
00454 };
00455
00456 U_NAMESPACE_END
00457
00458 #endif
00459
00460 #endif
00461
00462 #endif // VTZONE_H
00463