00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef VTZONE_H
00010 #define VTZONE_H
00011
00012 #include "unicode/utypes.h"
00013
00019 #if !UCONFIG_NO_FORMATTING
00020
00021 #include "unicode/basictz.h"
00022
00023 U_NAMESPACE_BEGIN
00024
00025 class VTZWriter;
00026 class VTZReader;
00027 class UVector;
00028
00043 class U_I18N_API VTimeZone : public BasicTimeZone {
00044 public:
00050 VTimeZone(const VTimeZone& source);
00051
00056 virtual ~VTimeZone();
00057
00063 VTimeZone& operator=(const VTimeZone& right);
00064
00073 virtual UBool operator==(const TimeZone& that) const;
00074
00083 virtual UBool operator!=(const TimeZone& that) const;
00084
00092 static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
00093
00101 static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ,
00102 UErrorCode &status);
00103
00113 static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
00114
00123 UBool getTZURL(UnicodeString& url) const;
00124
00130 void setTZURL(const UnicodeString& url);
00131
00140 UBool getLastModified(UDate& lastModified) const;
00141
00147 void setLastModified(UDate lastModified);
00148
00155 void write(UnicodeString& result, UErrorCode& status) const;
00156
00165 void write(UDate start, UnicodeString& result, UErrorCode& status) const;
00166
00180 void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) const;
00181
00188 virtual TimeZone* clone(void) const;
00189
00214 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00215 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
00216
00236 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00237 uint8_t dayOfWeek, int32_t millis,
00238 int32_t monthLength, UErrorCode& status) const;
00239
00262 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00263 int32_t& dstOffset, UErrorCode& ec) const;
00264
00272 virtual void setRawOffset(int32_t offsetMillis);
00273
00281 virtual int32_t getRawOffset(void) const;
00282
00289 virtual UBool useDaylightTime(void) const;
00290
00304 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00305
00314 virtual UBool hasSameRules(const TimeZone& other) const;
00315
00324 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
00325
00334 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
00335
00344 virtual int32_t countTransitionRules(UErrorCode& status) const;
00345
00362 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
00363 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
00364
00365 private:
00366 enum { DEFAULT_VTIMEZONE_LINES = 100 };
00367
00371 VTimeZone();
00372 static VTimeZone* createVTimeZone(VTZReader* reader);
00373 void write(VTZWriter& writer, UErrorCode& status) const;
00374 void write(UDate start, VTZWriter& writer, UErrorCode& status) const;
00375 void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const;
00376 void load(VTZReader& reader, UErrorCode& status);
00377 void parse(UErrorCode& status);
00378
00379 void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
00380 UErrorCode& status) const;
00381
00382 void writeHeaders(VTZWriter& w, UErrorCode& status) const;
00383 void writeFooter(VTZWriter& writer, UErrorCode& status) const;
00384
00385 void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00386 int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
00387 UErrorCode& status) const;
00388 void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00389 int32_t fromOffset, int32_t toOffset,
00390 int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
00391 UErrorCode& status) const;
00392 void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00393 int32_t fromOffset, int32_t toOffset,
00394 int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
00395 UDate startTime, UDate untilTime, UErrorCode& status) const;
00396 void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00397 int32_t fromOffset, int32_t toOffset,
00398 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00399 UDate startTime, UDate untilTime, UErrorCode& status) const;
00400 void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
00401 int32_t dayOfWeek, int32_t numDays,
00402 UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
00403 void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00404 int32_t fromOffset, int32_t toOffset,
00405 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00406 UDate startTime, UDate untilTime, UErrorCode& status) const;
00407 void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
00408 int32_t fromRawOffset, int32_t fromDSTSavings,
00409 UDate startTime, UErrorCode& status) const;
00410
00411 void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00412 int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
00413 void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
00414 void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
00415 void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
00416
00417 BasicTimeZone *tz;
00418 UVector *vtzlines;
00419 UnicodeString tzurl;
00420 UDate lastmod;
00421 UnicodeString olsonzid;
00422 UnicodeString icutzver;
00423
00424 public:
00436 static UClassID U_EXPORT2 getStaticClassID(void);
00437
00449 virtual UClassID getDynamicClassID(void) const;
00450 };
00451
00452 U_NAMESPACE_END
00453
00454 #endif
00455
00456 #endif // VTZONE_H
00457