ICU 4.8.1.1
4.8.1.1
|
00001 /* 00002 ******************************************************************************* 00003 * Copyright (C) 2007-2010, International Business Machines Corporation and * 00004 * others. All Rights Reserved. * 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) /*const*/; 00164 00178 void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) /*const*/; 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) /*const*/; 00323 00332 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; 00333 00342 virtual int32_t countTransitionRules(UErrorCode& status) /*const*/; 00343 00360 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, 00361 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/; 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) /*const*/; 00373 void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) /*const*/; 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 /* #if !UCONFIG_NO_FORMATTING */ 00453 00454 #endif // VTZONE_H 00455 //eof