00001
00002
00003
00004
00005
00006
00007 #ifndef VTZONE_H
00008 #define VTZONE_H
00009
00010 #include "unicode/utypes.h"
00011
00017 #if !UCONFIG_NO_FORMATTING
00018
00019 #include "unicode/basictz.h"
00020
00021 U_NAMESPACE_BEGIN
00022
00023 class VTZWriter;
00024 class VTZReader;
00025 class UVector;
00026
00041 class U_I18N_API VTimeZone : public BasicTimeZone {
00042 public:
00048 VTimeZone(const VTimeZone& source);
00049
00054 virtual ~VTimeZone();
00055
00061 VTimeZone& operator=(const VTimeZone& right);
00062
00071 virtual UBool operator==(const TimeZone& that) const;
00072
00081 virtual UBool operator!=(const TimeZone& that) const;
00082
00090 static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
00091
00099 static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ,
00100 UErrorCode &status);
00101
00111 static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
00112
00121 UBool getTZURL(UnicodeString& url) const;
00122
00128 void setTZURL(const UnicodeString& url);
00129
00138 UBool getLastModified(UDate& lastModified) const;
00139
00145 void setLastModified(UDate lastModified);
00146
00153 void write(UnicodeString& result, UErrorCode& status) const;
00154
00163 void write(UDate start, UnicodeString& result, UErrorCode& status) ;
00164
00178 void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) ;
00179
00186 virtual TimeZone* clone(void) const;
00187
00212 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00213 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
00214
00234 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00235 uint8_t dayOfWeek, int32_t millis,
00236 int32_t monthLength, UErrorCode& status) const;
00237
00260 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00261 int32_t& dstOffset, UErrorCode& ec) const;
00262
00270 virtual void setRawOffset(int32_t offsetMillis);
00271
00279 virtual int32_t getRawOffset(void) const;
00280
00287 virtual UBool useDaylightTime(void) const;
00288
00302 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00303
00312 virtual UBool hasSameRules(const TimeZone& other) const;
00313
00322 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) ;
00323
00332 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) ;
00333
00342 virtual int32_t countTransitionRules(UErrorCode& status) ;
00343
00360 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
00361 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) ;
00362
00363 private:
00364 enum { DEFAULT_VTIMEZONE_LINES = 100 };
00365
00369 VTimeZone();
00370 static VTimeZone* createVTimeZone(VTZReader* reader);
00371 void write(VTZWriter& writer, UErrorCode& status) const;
00372 void write(UDate start, VTZWriter& writer, UErrorCode& status) ;
00373 void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) ;
00374 void load(VTZReader& reader, UErrorCode& status);
00375 void parse(UErrorCode& status);
00376
00377 void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
00378 UErrorCode& status) const;
00379
00380 void writeHeaders(VTZWriter& w, UErrorCode& status) const;
00381 void writeFooter(VTZWriter& writer, UErrorCode& status) const;
00382
00383 void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00384 int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
00385 UErrorCode& status) const;
00386 void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00387 int32_t fromOffset, int32_t toOffset,
00388 int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
00389 UErrorCode& status) const;
00390 void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00391 int32_t fromOffset, int32_t toOffset,
00392 int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
00393 UDate startTime, UDate untilTime, UErrorCode& status) const;
00394 void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00395 int32_t fromOffset, int32_t toOffset,
00396 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00397 UDate startTime, UDate untilTime, UErrorCode& status) const;
00398 void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
00399 int32_t dayOfWeek, int32_t numDays,
00400 UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
00401 void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00402 int32_t fromOffset, int32_t toOffset,
00403 int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00404 UDate startTime, UDate untilTime, UErrorCode& status) const;
00405 void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
00406 int32_t fromRawOffset, int32_t fromDSTSavings,
00407 UDate startTime, UErrorCode& status) const;
00408
00409 void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00410 int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
00411 void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
00412 void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
00413 void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
00414
00415 BasicTimeZone *tz;
00416 UVector *vtzlines;
00417 UnicodeString tzurl;
00418 UDate lastmod;
00419 UnicodeString olsonzid;
00420 UnicodeString icutzver;
00421
00422 public:
00434 static UClassID U_EXPORT2 getStaticClassID(void);
00435
00447 virtual UClassID getDynamicClassID(void) const;
00448 };
00449
00450 U_NAMESPACE_END
00451
00452 #endif
00453
00454 #endif // VTZONE_H
00455