ICU 50.1.2  50.1.2
vtzone.h
Go to the documentation of this file.
1 /*
2 *******************************************************************************
3 * Copyright (C) 2007-2012, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 *******************************************************************************
6 */
7 #ifndef VTZONE_H
8 #define VTZONE_H
9 
10 #include "unicode/utypes.h"
11 
17 #if !UCONFIG_NO_FORMATTING
18 
19 #include "unicode/basictz.h"
20 
22 
23 class VTZWriter;
24 class VTZReader;
25 class UVector;
26 
42 public:
48  VTimeZone(const VTimeZone& source);
49 
54  virtual ~VTimeZone();
55 
61  VTimeZone& operator=(const VTimeZone& right);
62 
71  virtual UBool operator==(const TimeZone& that) const;
72 
81  virtual UBool operator!=(const TimeZone& that) const;
82 
90  static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
91 
99  static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ,
100  UErrorCode &status);
101 
111  static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
112 
121  UBool getTZURL(UnicodeString& url) const;
122 
128  void setTZURL(const UnicodeString& url);
129 
138  UBool getLastModified(UDate& lastModified) const;
139 
145  void setLastModified(UDate lastModified);
146 
153  void write(UnicodeString& result, UErrorCode& status) const;
154 
163  void write(UDate start, UnicodeString& result, UErrorCode& status) /*const*/;
164 
178  void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) /*const*/;
179 
186  virtual TimeZone* clone(void) const;
187 
212  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
213  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
214 
234  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
235  uint8_t dayOfWeek, int32_t millis,
236  int32_t monthLength, UErrorCode& status) const;
237 
260  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
261  int32_t& dstOffset, UErrorCode& ec) const;
262 
270  virtual void setRawOffset(int32_t offsetMillis);
271 
279  virtual int32_t getRawOffset(void) const;
280 
287  virtual UBool useDaylightTime(void) const;
288 
302  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
303 
312  virtual UBool hasSameRules(const TimeZone& other) const;
313 
322  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
323 
332  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
333 
342  virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
343 
360  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
361  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
362 
363 private:
364  enum { DEFAULT_VTIMEZONE_LINES = 100 };
365 
369  VTimeZone();
370  static VTimeZone* createVTimeZone(VTZReader* reader);
371  void write(VTZWriter& writer, UErrorCode& status) const;
372  void write(UDate start, VTZWriter& writer, UErrorCode& status) /*const*/;
373  void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) /*const*/;
374  void load(VTZReader& reader, UErrorCode& status);
375  void parse(UErrorCode& status);
376 
377  void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
378  UErrorCode& status) const;
379 
380  void writeHeaders(VTZWriter& w, UErrorCode& status) const;
381  void writeFooter(VTZWriter& writer, UErrorCode& status) const;
382 
383  void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
384  int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
385  UErrorCode& status) const;
386  void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
387  int32_t fromOffset, int32_t toOffset,
388  int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
389  UErrorCode& status) const;
390  void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
391  int32_t fromOffset, int32_t toOffset,
392  int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
393  UDate startTime, UDate untilTime, UErrorCode& status) const;
394  void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
395  int32_t fromOffset, int32_t toOffset,
396  int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
397  UDate startTime, UDate untilTime, UErrorCode& status) const;
398  void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
399  int32_t dayOfWeek, int32_t numDays,
400  UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
401  void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
402  int32_t fromOffset, int32_t toOffset,
403  int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
404  UDate startTime, UDate untilTime, UErrorCode& status) const;
405  void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
406  int32_t fromRawOffset, int32_t fromDSTSavings,
407  UDate startTime, UErrorCode& status) const;
408 
409  void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename,
410  int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
411  void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
412  void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
413  void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
414 
415  BasicTimeZone *tz;
416  UVector *vtzlines;
417  UnicodeString tzurl;
418  UDate lastmod;
419  UnicodeString olsonzid;
420  UnicodeString icutzver;
421 
422 public:
434  static UClassID U_EXPORT2 getStaticClassID(void);
435 
447  virtual UClassID getDynamicClassID(void) const;
448 };
449 
451 
452 #endif /* #if !UCONFIG_NO_FORMATTING */
453 
454 #endif // VTZONE_H
455 //eof
virtual UBool useDaylightTime(void) const =0
Queries if this time zone uses daylight savings 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...
virtual void getTimeZoneRules(const InitialTimeZoneRule *&initial, const TimeZoneRule *trsrules[], int32_t &trscount, UErrorCode &status)=0
Gets the InitialTimeZoneRule and the set of TimeZoneRule which represent time transitions for this ti...
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result)=0
Gets the first time zone transition after the base time.
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
double UDate
Date and Time data type.
Definition: utypes.h:201
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
static UClassID getStaticClassID(void)
Return the class ID for this class.
VTimeZone is a class implementing RFC2445 VTIMEZONE.
Definition: vtzone.h:41
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:129
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:358
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:32
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:198
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
virtual TimeZone * clone(void) const =0
Clones TimeZone objects polymorphically.
virtual UBool hasSameRules(const TimeZone &other) const
Returns true if this zone has the same rule and offset as another zone.
TimeZoneTransition is a class representing a time zone transition.
Definition: tztrans.h:31
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:34
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result)=0
Gets the most recent time zone transition before the base time.
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually...
Definition: tzrule.h:376
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
UBool operator!=(const TimeZone &that) const
Returns true if the two TimeZones are NOT equal; that is, if operator==() returns false...
Definition: timezone.h:377
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:476
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:246
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.
virtual int32_t countTransitionRules(UErrorCode &status)=0
Returns the number of TimeZoneRules which represents time transitions, for this time zone...
int8_t UBool
The ICU boolean type.
Definition: umachine.h:200