ICU 59.1  59.1
vtzone.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 *******************************************************************************
5 * Copyright (C) 2007-2013, International Business Machines Corporation and
6 * others. All Rights Reserved.
7 *******************************************************************************
8 */
9 #ifndef VTZONE_H
10 #define VTZONE_H
11 
12 #include "unicode/utypes.h"
13 
19 #if !UCONFIG_NO_FORMATTING
20 
21 #include "unicode/basictz.h"
22 
24 
25 class VTZWriter;
26 class VTZReader;
27 class UVector;
28 
44 public:
50  VTimeZone(const VTimeZone& source);
51 
56  virtual ~VTimeZone();
57 
63  VTimeZone& operator=(const VTimeZone& right);
64 
73  virtual UBool operator==(const TimeZone& that) const;
74 
83  virtual UBool operator!=(const TimeZone& that) const;
84 
92  static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
93 
101  static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ,
102  UErrorCode &status);
103 
113  static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
114 
123  UBool getTZURL(UnicodeString& url) const;
124 
130  void setTZURL(const UnicodeString& url);
131 
140  UBool getLastModified(UDate& lastModified) const;
141 
147  void setLastModified(UDate lastModified);
148 
155  void write(UnicodeString& result, UErrorCode& status) const;
156 
165  void write(UDate start, UnicodeString& result, UErrorCode& status) const;
166 
180  void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) const;
181 
188  virtual TimeZone* clone(void) const;
189 
214  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
215  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
216 
236  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
237  uint8_t dayOfWeek, int32_t millis,
238  int32_t monthLength, UErrorCode& status) const;
239 
262  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
263  int32_t& dstOffset, UErrorCode& ec) const;
264 
272  virtual void setRawOffset(int32_t offsetMillis);
273 
281  virtual int32_t getRawOffset(void) const;
282 
289  virtual UBool useDaylightTime(void) const;
290 
304  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
305 
314  virtual UBool hasSameRules(const TimeZone& other) const;
315 
324  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
325 
334  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
335 
344  virtual int32_t countTransitionRules(UErrorCode& status) const;
345 
362  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
363  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
364 
365 private:
366  enum { DEFAULT_VTIMEZONE_LINES = 100 };
367 
371  VTimeZone();
372  static VTimeZone* createVTimeZone(VTZReader* reader);
373  void write(VTZWriter& writer, UErrorCode& status) const;
374  void write(UDate start, VTZWriter& writer, UErrorCode& status) const;
375  void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const;
376  void load(VTZReader& reader, UErrorCode& status);
377  void parse(UErrorCode& status);
378 
379  void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
380  UErrorCode& status) const;
381 
382  void writeHeaders(VTZWriter& w, UErrorCode& status) const;
383  void writeFooter(VTZWriter& writer, UErrorCode& status) const;
384 
385  void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
386  int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
387  UErrorCode& status) const;
388  void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
389  int32_t fromOffset, int32_t toOffset,
390  int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
391  UErrorCode& status) const;
392  void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
393  int32_t fromOffset, int32_t toOffset,
394  int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
395  UDate startTime, UDate untilTime, UErrorCode& status) const;
396  void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
397  int32_t fromOffset, int32_t toOffset,
398  int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
399  UDate startTime, UDate untilTime, UErrorCode& status) const;
400  void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
401  int32_t dayOfWeek, int32_t numDays,
402  UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
403  void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
404  int32_t fromOffset, int32_t toOffset,
405  int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
406  UDate startTime, UDate untilTime, UErrorCode& status) const;
407  void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
408  int32_t fromRawOffset, int32_t fromDSTSavings,
409  UDate startTime, UErrorCode& status) const;
410 
411  void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
412  int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
413  void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
414  void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
415  void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
416 
417  BasicTimeZone *tz;
418  UVector *vtzlines;
419  UnicodeString tzurl;
420  UDate lastmod;
421  UnicodeString olsonzid;
422  UnicodeString icutzver;
423 
424 public:
436  static UClassID U_EXPORT2 getStaticClassID(void);
437 
449  virtual UClassID getDynamicClassID(void) const;
450 };
451 
453 
454 #endif /* #if !UCONFIG_NO_FORMATTING */
455 
456 #endif // VTZONE_H
457 //eof
virtual UBool useDaylightTime(void) const =0
Queries if this time zone uses daylight savings time.
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the most recent time zone transition before the base time.
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 =0
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
double UDate
Date and Time data type.
Definition: utypes.h:203
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:93
static UClassID getStaticClassID(void)
Return the class ID for this class.
VTimeZone is a class implementing RFC2445 VTIMEZONE.
Definition: vtzone.h:43
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:131
C++ API: ICU TimeZone base class.
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:360
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:34
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:200
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:131
virtual TimeZone * clone(void) const =0
Clones TimeZone objects polymorphically.
TimeZoneTransition is a class representing a time zone transition.
Definition: tztrans.h:33
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:36
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually...
Definition: tzrule.h:378
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:132
virtual void setRawOffset(int32_t offsetMillis)=0
Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local time...
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:396
virtual void getTimeZoneRules(const InitialTimeZoneRule *&initial, const TimeZoneRule *trsrules[], int32_t &trscount, UErrorCode &status) const =0
Gets the InitialTimeZoneRule and the set of TimeZoneRule which represent time transitions for this ti...
virtual UBool hasSameRules(const TimeZone &other) const
Returns true if this zone has the same rule and offset as another zone.
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the first time zone transition after the base time.
virtual int32_t countTransitionRules(UErrorCode &status) const =0
Returns the number of TimeZoneRules which represents time transitions, for this time zone...
virtual int32_t getRawOffset(void) const =0
Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local ti...
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const =0
Queries if the given date is in daylight savings time in this time zone.
UBool operator!=(const TimeZone &that) const
Returns true if the two TimeZones are NOT equal; that is, if operator==() returns false...
Definition: timezone.h:452
int8_t UBool
The ICU boolean type.
Definition: umachine.h:236