ICU 58.2  58.2
rbtz.h
Go to the documentation of this file.
1 // Copyright (C) 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 RBTZ_H
10 #define RBTZ_H
11 
12 #include "unicode/utypes.h"
13 
19 #if !UCONFIG_NO_FORMATTING
20 
21 #include "unicode/basictz.h"
22 #include "unicode/unistr.h"
23 
25 
26 // forward declaration
27 class UVector;
28 struct Transition;
29 
37 public:
47  RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule);
48 
54  RuleBasedTimeZone(const RuleBasedTimeZone& source);
55 
60  virtual ~RuleBasedTimeZone();
61 
68 
77  virtual UBool operator==(const TimeZone& that) const;
78 
87  virtual UBool operator!=(const TimeZone& that) const;
88 
104  void addTransitionRule(TimeZoneRule* rule, UErrorCode& status);
105 
115  void complete(UErrorCode& status);
116 
124  virtual TimeZone* clone(void) const;
125 
150  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
151  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
152 
172  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
173  uint8_t dayOfWeek, int32_t millis,
174  int32_t monthLength, UErrorCode& status) const;
175 
198  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
199  int32_t& dstOffset, UErrorCode& ec) const;
200 
208  virtual void setRawOffset(int32_t offsetMillis);
209 
217  virtual int32_t getRawOffset(void) const;
218 
225  virtual UBool useDaylightTime(void) const;
226 
240  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
241 
250  virtual UBool hasSameRules(const TimeZone& other) const;
251 
260  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
261 
270  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
271 
280  virtual int32_t countTransitionRules(UErrorCode& status) const;
281 
298  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
299  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
300 
305  virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
306  int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
307 
308 private:
309  void deleteRules(void);
310  void deleteTransitions(void);
311  UVector* copyRules(UVector* source);
312  TimeZoneRule* findRuleInFinal(UDate date, UBool local,
313  int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
314  UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
315  UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
316  int32_t getLocalDelta(int32_t rawBefore, int32_t dstBefore, int32_t rawAfter, int32_t dstAfter,
317  int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
318  UDate getTransitionTime(Transition* transition, UBool local,
319  int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
320  void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt,
321  int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const;
322  void completeConst(UErrorCode &status) const;
323 
324  InitialTimeZoneRule *fInitialRule;
325  UVector *fHistoricRules;
326  UVector *fFinalRules;
327  UVector *fHistoricTransitions;
328  UBool fUpToDate;
329 
330 public:
342  static UClassID U_EXPORT2 getStaticClassID(void);
343 
355  virtual UClassID getDynamicClassID(void) const;
356 };
357 
359 
360 #endif /* #if !UCONFIG_NO_FORMATTING */
361 
362 #endif // RBTZ_H
363 
364 //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...
a BasicTimeZone subclass implemented in terms of InitialTimeZoneRule and TimeZoneRule instances ...
Definition: rbtz.h:36
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, int32_t &rawOffset, int32_t &dstOffset, UErrorCode &status) const
Get time zone offsets from local wall time.
double UDate
Date and Time data type.
Definition: utypes.h:203
C++ API: Unicode String.
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.
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.
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:33
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:36
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:132
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
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...
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:295
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.
int8_t UBool
The ICU boolean type.
Definition: umachine.h:259