ICU 77.1  77.1
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
rbtz.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 RBTZ_H
10 #define RBTZ_H
11 
12 #include "unicode/utypes.h"
13 
14 #if U_SHOW_CPLUSPLUS_API
15 
21 #if !UCONFIG_NO_FORMATTING
22 
23 #include "unicode/basictz.h"
24 #include "unicode/unistr.h"
25 
26 U_NAMESPACE_BEGIN
27 
28 // forward declaration
29 class UVector;
30 struct Transition;
31 
39 public:
50 
57 
62  virtual ~RuleBasedTimeZone();
63 
70 
79  virtual bool operator==(const TimeZone& that) const override;
80 
89  virtual bool operator!=(const TimeZone& that) const;
90 
108 
118  void complete(UErrorCode& status);
119 
127  virtual RuleBasedTimeZone* clone() const override;
128 
153  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
154  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const override;
155 
175  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
176  uint8_t dayOfWeek, int32_t millis,
177  int32_t monthLength, UErrorCode& status) const override;
178 
201  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
202  int32_t& dstOffset, UErrorCode& ec) const override;
203 
211  virtual void setRawOffset(int32_t offsetMillis) override;
212 
220  virtual int32_t getRawOffset() const override;
221 
228  virtual UBool useDaylightTime() const override;
229 
230 #ifndef U_FORCE_HIDE_DEPRECATED_API
244  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override;
245 #endif // U_FORCE_HIDE_DEPRECATED_API
246 
255  virtual UBool hasSameRules(const TimeZone& other) const override;
256 
265  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
266 
275  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
276 
285  virtual int32_t countTransitionRules(UErrorCode& status) const override;
286 
303  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
304  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
305 
310  virtual void getOffsetFromLocal(
311  UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
312  UTimeZoneLocalOption duplicatedTimeOpt,
313  int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
314 
315 private:
316  void deleteRules();
317  void deleteTransitions();
318  UVector* copyRules(UVector* source);
319  TimeZoneRule* findRuleInFinal(UDate date, UBool local,
320  int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
321  UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
322  UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
323  int32_t getLocalDelta(int32_t rawBefore, int32_t dstBefore, int32_t rawAfter, int32_t dstAfter,
324  int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
325  UDate getTransitionTime(Transition* transition, UBool local,
326  int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
327  void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt,
328  int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const;
329  void completeConst(UErrorCode &status) const;
330 
331  InitialTimeZoneRule *fInitialRule;
332  UVector *fHistoricRules;
333  UVector *fFinalRules;
334  UVector *fHistoricTransitions;
335  UBool fUpToDate;
336 
337 public:
349  static UClassID U_EXPORT2 getStaticClassID();
350 
362  virtual UClassID getDynamicClassID() const override;
363 };
364 
365 U_NAMESPACE_END
366 
367 #endif /* #if !UCONFIG_NO_FORMATTING */
368 
369 #endif /* U_SHOW_CPLUSPLUS_API */
370 
371 #endif // RBTZ_H
372 
373 //eof
C++ API: ICU TimeZone base class.
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:38
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:202
a BasicTimeZone subclass implemented in terms of InitialTimeZoneRule and TimeZoneRule instances
Definition: rbtz.h:38
virtual ~RuleBasedTimeZone()
Destructor.
virtual int32_t countTransitionRules(UErrorCode &status) const override
Returns the number of TimeZoneRules which represents time transitions, for this time zone,...
static UClassID getStaticClassID()
Return the class ID for this class.
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const override
Gets the most recent time zone transition before the base time.
void complete(UErrorCode &status)
Makes the TimeZoneRule ready to handle actual timezone calculation APIs.
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &status) const override
Gets the time zone offset, for current date, modified in case of daylight savings.
virtual void getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt, int32_t &rawOffset, int32_t &dstOffset, UErrorCode &status) const override
Get time zone offsets from local wall 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 override
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
virtual void setRawOffset(int32_t offsetMillis) override
Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local time,...
virtual RuleBasedTimeZone * clone() const override
Clones TimeZone objects polymorphically.
virtual void getTimeZoneRules(const InitialTimeZoneRule *&initial, const TimeZoneRule *trsrules[], int32_t &trscount, UErrorCode &status) const override
Gets the InitialTimeZoneRule and the set of TimeZoneRule which represent time transitions for this ti...
virtual void getOffset(UDate date, UBool local, int32_t &rawOffset, int32_t &dstOffset, UErrorCode &ec) const override
Returns the time zone raw and GMT offset for the given moment in time.
void addTransitionRule(TimeZoneRule *rule, UErrorCode &status)
Adds the TimeZoneRule which represents time transitions.
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const override
Gets the first time zone transition after the base time.
RuleBasedTimeZone(const RuleBasedTimeZone &source)
Copy constructor.
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const override
Queries if the given date is in daylight savings time in this time zone.
virtual UClassID getDynamicClassID() const override
Returns a unique class ID POLYMORPHICALLY.
virtual UBool hasSameRules(const TimeZone &other) const override
Returns true if this zone has the same rule and offset as another zone.
RuleBasedTimeZone(const UnicodeString &id, InitialTimeZoneRule *initialRule)
Constructs a RuleBasedTimeZone object with the ID and the InitialTimeZoneRule.
RuleBasedTimeZone & operator=(const RuleBasedTimeZone &right)
Assignment operator.
virtual bool operator==(const TimeZone &that) const override
Return true if the given TimeZone objects are semantically equal.
virtual int32_t getRawOffset() const override
Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local ti...
virtual UBool useDaylightTime() const override
Queries if this time zone uses daylight savings time.
virtual bool operator!=(const TimeZone &that) const
Return true if the given TimeZone objects are semantically unequal.
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:36
TimeZoneTransition is a class representing a time zone transition.
Definition: tztrans.h:35
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:133
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
UTimeZoneLocalOption
Options used by ucal_getTimeZoneOffsetFromLocal and BasicTimeZone::getOffsetFromLocal() to specify ho...
Definition: ucal.h:1682
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:247
C++ API: Unicode String.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:430
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:316
double UDate
Date and Time data type.
Definition: utypes.h:218