ICU 73.2  73.2
vtzone.h
Go to the documentation of this file.
00001 // © 2016 and later: Unicode, Inc. and others.
00002 // License & terms of use: http://www.unicode.org/copyright.html
00003 /*
00004 *******************************************************************************
00005 * Copyright (C) 2007-2013, International Business Machines Corporation and
00006 * others. All Rights Reserved.
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     void write(VTZWriter& writer, UErrorCode& status) const;
00386     void write(UDate start, VTZWriter& writer, UErrorCode& status) const;
00387     void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const;
00388     void load(VTZReader& reader, UErrorCode& status);
00389     void parse(UErrorCode& status);
00390 
00391     void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
00392         UErrorCode& status) const;
00393 
00394     void writeHeaders(VTZWriter& w, UErrorCode& status) const;
00395     void writeFooter(VTZWriter& writer, UErrorCode& status) const;
00396 
00397     void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00398                               int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
00399                               UErrorCode& status) const;
00400     void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00401                              int32_t fromOffset, int32_t toOffset,
00402                              int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
00403                              UErrorCode& status) const;
00404     void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00405                              int32_t fromOffset, int32_t toOffset,
00406                              int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
00407                              UDate startTime, UDate untilTime, UErrorCode& status) const;
00408     void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00409                                      int32_t fromOffset, int32_t toOffset,
00410                                      int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00411                                      UDate startTime, UDate untilTime, UErrorCode& status) const;
00412     void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
00413                                          int32_t dayOfWeek, int32_t numDays,
00414                                          UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
00415     void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00416                                      int32_t fromOffset, int32_t toOffset,
00417                                      int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00418                                      UDate startTime, UDate untilTime, UErrorCode& status) const;
00419     void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
00420                         int32_t fromRawOffset, int32_t fromDSTSavings,
00421                         UDate startTime, UErrorCode& status) const;
00422 
00423     void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
00424                         int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
00425     void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
00426     void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
00427     void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
00428 
00429     BasicTimeZone   *tz;
00430     UVector         *vtzlines;
00431     UnicodeString   tzurl;
00432     UDate           lastmod;
00433     UnicodeString   olsonzid;
00434     UnicodeString   icutzver;
00435 
00436 public:
00448     static UClassID U_EXPORT2 getStaticClassID(void);
00449 
00461     virtual UClassID getDynamicClassID(void) const override;
00462 };
00463 
00464 U_NAMESPACE_END
00465 
00466 #endif /* #if !UCONFIG_NO_FORMATTING */
00467 
00468 #endif /* U_SHOW_CPLUSPLUS_API */
00469 
00470 #endif // VTZONE_H
00471 //eof