123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- #ifndef VTZONE_H
- #define VTZONE_H
- #include "unicode/utypes.h"
- #if !UCONFIG_NO_FORMATTING
- #include "unicode/basictz.h"
- U_NAMESPACE_BEGIN
- class VTZWriter;
- class VTZReader;
- class UVector;
- /**
- * <code>VTimeZone</code> is a class implementing RFC2445 VTIMEZONE. You can create a
- * <code>VTimeZone</code> instance from a time zone ID supported by <code>TimeZone</code>.
- * With the <code>VTimeZone</code> instance created from the ID, you can write out the rule
- * in RFC2445 VTIMEZONE format. Also, you can create a <code>VTimeZone</code> instance
- * from RFC2445 VTIMEZONE data stream, which allows you to calculate time
- * zone offset by the rules defined by the data. Or, you can create a
- * <code>VTimeZone</code> from any other ICU <code>BasicTimeZone</code>.
- * <br><br>
- * Note: The consumer of this class reading or writing VTIMEZONE data is responsible to
- * decode or encode Non-ASCII text. Methods reading/writing VTIMEZONE data in this class
- * do nothing with MIME encoding.
- * @stable ICU 3.8
- */
- class U_I18N_API VTimeZone : public BasicTimeZone {
- public:
-
- VTimeZone(const VTimeZone& source);
-
- virtual ~VTimeZone();
-
- VTimeZone& operator=(const VTimeZone& right);
-
- virtual UBool operator==(const TimeZone& that) const;
-
- virtual UBool operator!=(const TimeZone& that) const;
-
- static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
-
- static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ,
- UErrorCode &status);
-
- static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
-
- UBool getTZURL(UnicodeString& url) const;
-
- void setTZURL(const UnicodeString& url);
-
- UBool getLastModified(UDate& lastModified) const;
-
- void setLastModified(UDate lastModified);
-
- void write(UnicodeString& result, UErrorCode& status) const;
-
- void write(UDate start, UnicodeString& result, UErrorCode& status) const;
-
- void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) const;
-
- virtual TimeZone* clone(void) const;
-
- virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
-
- virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis,
- int32_t monthLength, UErrorCode& status) const;
-
- virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
- int32_t& dstOffset, UErrorCode& ec) const;
-
- virtual void setRawOffset(int32_t offsetMillis);
-
- virtual int32_t getRawOffset(void) const;
-
- virtual UBool useDaylightTime(void) const;
-
- virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
-
- virtual UBool hasSameRules(const TimeZone& other) const;
-
- virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
-
- virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
-
- virtual int32_t countTransitionRules(UErrorCode& status) const;
-
- virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
- const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
- private:
- enum { DEFAULT_VTIMEZONE_LINES = 100 };
-
- VTimeZone();
- static VTimeZone* createVTimeZone(VTZReader* reader);
- void write(VTZWriter& writer, UErrorCode& status) const;
- void write(UDate start, VTZWriter& writer, UErrorCode& status) const;
- void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const;
- void load(VTZReader& reader, UErrorCode& status);
- void parse(UErrorCode& status);
- void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
- UErrorCode& status) const;
- void writeHeaders(VTZWriter& w, UErrorCode& status) const;
- void writeFooter(VTZWriter& writer, UErrorCode& status) const;
- void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
- int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
- UErrorCode& status) const;
- void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
- UErrorCode& status) const;
- void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
- UDate startTime, UDate untilTime, UErrorCode& status) const;
- void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
- UDate startTime, UDate untilTime, UErrorCode& status) const;
- void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
- int32_t dayOfWeek, int32_t numDays,
- UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
- void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
- UDate startTime, UDate untilTime, UErrorCode& status) const;
- void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
- int32_t fromRawOffset, int32_t fromDSTSavings,
- UDate startTime, UErrorCode& status) const;
- void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
- int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
- void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
- void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
- void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
- BasicTimeZone *tz;
- UVector *vtzlines;
- UnicodeString tzurl;
- UDate lastmod;
- UnicodeString olsonzid;
- UnicodeString icutzver;
- public:
-
- static UClassID U_EXPORT2 getStaticClassID(void);
-
- virtual UClassID getDynamicClassID(void) const;
- };
- U_NAMESPACE_END
- #endif
- #endif
|