ICU 70.1  70.1
tzrule.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-2008, International Business Machines Corporation and *
6 * others. All Rights Reserved. *
7 *******************************************************************************
8 */
9 #ifndef TZRULE_H
10 #define TZRULE_H
11 
17 #include "unicode/utypes.h"
18 
19 #if U_SHOW_CPLUSPLUS_API
20 
21 #if !UCONFIG_NO_FORMATTING
22 
23 #include "unicode/uobject.h"
24 #include "unicode/unistr.h"
25 #include "unicode/dtrule.h"
26 
27 U_NAMESPACE_BEGIN
28 
37 public:
42  virtual ~TimeZoneRule();
43 
50  virtual TimeZoneRule* clone() const = 0;
51 
59  virtual bool operator==(const TimeZoneRule& that) const;
60 
68  virtual bool operator!=(const TimeZoneRule& that) const;
69 
77 
83  int32_t getRawOffset(void) const;
84 
91  int32_t getDSTSavings(void) const;
92 
101  virtual UBool isEquivalentTo(const TimeZoneRule& other) const;
102 
114  virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
115 
127  virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
128 
143  virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
144  UBool inclusive, UDate& result) const = 0;
145 
160  virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
161  UBool inclusive, UDate& result) const = 0;
162 
163 protected:
164 
174  TimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
175 
181  TimeZoneRule(const TimeZoneRule& source);
182 
189 
190 private:
191  UnicodeString fName; // time name
192  int32_t fRawOffset; // UTC offset of the standard time in milliseconds
193  int32_t fDSTSavings; // DST saving amount in milliseconds
194 };
195 
203 public:
213  InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
214 
221 
227 
234  virtual InitialTimeZoneRule* clone() const override;
235 
242 
250  virtual bool operator==(const TimeZoneRule& that) const override;
251 
259  virtual bool operator!=(const TimeZoneRule& that) const override;
260 
273  UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
274 
283  virtual UBool isEquivalentTo(const TimeZoneRule& that) const override;
284 
296  virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
297 
309  virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
310 
325  virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
326  UBool inclusive, UDate& result) const override;
327 
342  virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
343  UBool inclusive, UDate& result) const override;
344 
345 public:
357  static UClassID U_EXPORT2 getStaticClassID(void);
358 
370  virtual UClassID getDynamicClassID(void) const override;
371 };
372 
381 public:
386  static const int32_t MAX_YEAR;
387 
404  AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
405  const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear);
406 
423  AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
424  DateTimeRule* dateTimeRule, int32_t startYear, int32_t endYear);
425 
432 
438 
445  virtual AnnualTimeZoneRule* clone() const override;
446 
453 
461  virtual bool operator==(const TimeZoneRule& that) const override;
462 
470  virtual bool operator!=(const TimeZoneRule& that) const override;
471 
478  const DateTimeRule* getRule(void) const;
479 
486  int32_t getStartYear(void) const;
487 
494  int32_t getEndYear(void) const;
495 
508  UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
509 
518  virtual UBool isEquivalentTo(const TimeZoneRule& that) const override;
519 
531  virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
532 
544  virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
545 
560  virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
561  UBool inclusive, UDate& result) const override;
562 
577  virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
578  UBool inclusive, UDate& result) const override;
579 
580 
581 private:
582  DateTimeRule* fDateTimeRule;
583  int32_t fStartYear;
584  int32_t fEndYear;
585 
586 public:
598  static UClassID U_EXPORT2 getStaticClassID(void);
599 
611  virtual UClassID getDynamicClassID(void) const override;
612 };
613 
621 public:
639  TimeArrayTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
640  const UDate* startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType);
641 
648 
654 
661  virtual TimeArrayTimeZoneRule* clone() const override;
662 
669 
677  virtual bool operator==(const TimeZoneRule& that) const override;
678 
686  virtual bool operator!=(const TimeZoneRule& that) const override;
687 
697 
707  UBool getStartTimeAt(int32_t index, UDate& result) const;
708 
714  int32_t countStartTimes(void) const;
715 
724  virtual UBool isEquivalentTo(const TimeZoneRule& that) const override;
725 
737  virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
738 
750  virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
751 
766  virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
767  UBool inclusive, UDate& result) const override;
768 
783  virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
784  UBool inclusive, UDate& result) const override;
785 
786 
787 private:
788  enum { TIMEARRAY_STACK_BUFFER_SIZE = 32 };
789  UBool initStartTimes(const UDate source[], int32_t size, UErrorCode& ec);
790  UDate getUTC(UDate time, int32_t raw, int32_t dst) const;
791 
792  DateTimeRule::TimeRuleType fTimeRuleType;
793  int32_t fNumStartTimes;
794  UDate* fStartTimes;
795  UDate fLocalStartTimes[TIMEARRAY_STACK_BUFFER_SIZE];
796 
797 public:
809  static UClassID U_EXPORT2 getStaticClassID(void);
810 
822  virtual UClassID getDynamicClassID(void) const override;
823 };
824 
825 
826 U_NAMESPACE_END
827 
828 #endif /* #if !UCONFIG_NO_FORMATTING */
829 
830 #endif /* U_SHOW_CPLUSPLUS_API */
831 
832 #endif // TZRULE_H
833 
834 //eof
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually.
Definition: tzrule.h:380
virtual ~AnnualTimeZoneRule()
Destructor.
AnnualTimeZoneRule(const UnicodeString &name, int32_t rawOffset, int32_t dstSavings, DateTimeRule *dateTimeRule, int32_t startYear, int32_t endYear)
Constructs a AnnualTimeZoneRule with the name, the GMT offset of its standard time,...
static const int32_t MAX_YEAR
The constant representing the maximum year used for designating a rule is permanent.
Definition: tzrule.h:386
virtual UClassID getDynamicClassID(void) const override
Returns a unique class ID POLYMORPHICALLY.
virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const override
Gets the first time when this rule takes effect after the specified time.
UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const
Gets the time when this rule takes effect in the given year.
virtual AnnualTimeZoneRule * clone() const override
Clone this AnnualTimeZoneRule object polymorphically.
AnnualTimeZoneRule(const UnicodeString &name, int32_t rawOffset, int32_t dstSavings, const DateTimeRule &dateTimeRule, int32_t startYear, int32_t endYear)
Constructs a AnnualTimeZoneRule with the name, the GMT offset of its standard time,...
AnnualTimeZoneRule & operator=(const AnnualTimeZoneRule &right)
Assignment operator.
virtual UBool isEquivalentTo(const TimeZoneRule &that) const override
Returns if this rule represents the same rule and offsets as another.
int32_t getEndYear(void) const
Gets the end year when this rule takes effect.
int32_t getStartYear(void) const
Gets the first year when this rule takes effect.
static UClassID getStaticClassID(void)
Return the class ID for this class.
virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const override
Gets the very first time when this rule takes effect.
virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const override
Gets the final time when this rule takes effect.
const DateTimeRule * getRule(void) const
Gets the start date/time rule used by this rule.
virtual bool operator==(const TimeZoneRule &that) const override
Return true if the given TimeZoneRule objects are semantically equal.
virtual bool operator!=(const TimeZoneRule &that) const override
Return true if the given TimeZoneRule objects are semantically unequal.
virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const override
Gets the most recent time when this rule takes effect before the specified time.
AnnualTimeZoneRule(const AnnualTimeZoneRule &source)
Copy constructor.
DateTimeRule is a class representing a time in a year by a rule specified by month,...
Definition: dtrule.h:33
TimeRuleType
Time rule type constants.
Definition: dtrule.h:55
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:202
InitialTimeZoneRule(const UnicodeString &name, int32_t rawOffset, int32_t dstSavings)
Constructs an InitialTimeZoneRule with the name, the GMT offset of its standard time and the amount o...
virtual bool operator==(const TimeZoneRule &that) const override
Return true if the given TimeZoneRule objects are semantically equal.
InitialTimeZoneRule & operator=(const InitialTimeZoneRule &right)
Assignment operator.
static UClassID getStaticClassID(void)
Return the class ID for this class.
UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const
Gets the time when this rule takes effect in the given year.
virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const override
Gets the first time when this rule takes effect after the specified time.
virtual InitialTimeZoneRule * clone() const override
Clone this InitialTimeZoneRule object polymorphically.
virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const override
Gets the final time when this rule takes effect.
virtual bool operator!=(const TimeZoneRule &that) const override
Return true if the given TimeZoneRule objects are semantically unequal.
virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const override
Gets the most recent time when this rule takes effect before the specified time.
InitialTimeZoneRule(const InitialTimeZoneRule &source)
Copy constructor.
virtual ~InitialTimeZoneRule()
Destructor.
virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const override
Gets the very first time when this rule takes effect.
virtual UBool isEquivalentTo(const TimeZoneRule &that) const override
Returns if this rule represents the same rule and offsets as another.
virtual UClassID getDynamicClassID(void) const override
Returns a unique class ID POLYMORPHICALLY.
TimeArrayTimeZoneRule represents a time zone rule whose start times are defined by an array of millis...
Definition: tzrule.h:620
virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const override
Gets the first time when this rule takes effect after the specified time.
virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const override
Gets the final time when this rule takes effect.
virtual ~TimeArrayTimeZoneRule()
Destructor.
virtual TimeArrayTimeZoneRule * clone() const override
Clone this TimeArrayTimeZoneRule object polymorphically.
DateTimeRule::TimeRuleType getTimeType(void) const
Gets the time type of the start times used by this rule.
TimeArrayTimeZoneRule(const UnicodeString &name, int32_t rawOffset, int32_t dstSavings, const UDate *startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType)
Constructs a TimeArrayTimeZoneRule with the name, the GMT offset of its standard time,...
virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const override
Gets the very first time when this rule takes effect.
virtual UBool isEquivalentTo(const TimeZoneRule &that) const override
Returns if this rule represents the same rule and offsets as another.
virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const override
Gets the most recent time when this rule takes effect before the specified time.
UBool getStartTimeAt(int32_t index, UDate &result) const
Gets a start time at the index stored in this rule.
static UClassID getStaticClassID(void)
Return the class ID for this class.
virtual bool operator==(const TimeZoneRule &that) const override
Return true if the given TimeZoneRule objects are semantically equal.
virtual UClassID getDynamicClassID(void) const override
Returns a unique class ID POLYMORPHICALLY.
TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule &source)
Copy constructor.
virtual bool operator!=(const TimeZoneRule &that) const override
Return true if the given TimeZoneRule objects are semantically unequal.
TimeArrayTimeZoneRule & operator=(const TimeArrayTimeZoneRule &right)
Assignment operator.
int32_t countStartTimes(void) const
Returns the number of start times stored in this rule.
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:36
virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const =0
Gets the very first time when this rule takes effect.
UnicodeString & getName(UnicodeString &name) const
Fills in "name" with the name of this time zone.
TimeZoneRule(const UnicodeString &name, int32_t rawOffset, int32_t dstSavings)
Constructs a TimeZoneRule with the name, the GMT offset of its standard time and the amount of daylig...
virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const =0
Gets the first time when this rule takes effect after the specified time.
virtual bool operator!=(const TimeZoneRule &that) const
Return true if the given TimeZoneRule objects are semantically unequal.
int32_t getRawOffset(void) const
Gets the standard time offset.
virtual ~TimeZoneRule()
Destructor.
virtual UBool isEquivalentTo(const TimeZoneRule &other) const
Returns if this rule represents the same rule and offsets as another.
virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &result) const =0
Gets the most recent time when this rule takes effect before the specified time.
virtual bool operator==(const TimeZoneRule &that) const
Return true if the given TimeZoneRule objects are semantically equal.
int32_t getDSTSavings(void) const
Gets the amount of daylight saving delta time from the standard time.
virtual TimeZoneRule * clone() const =0
Clone this TimeZoneRule object polymorphically.
virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const =0
Gets the final time when this rule takes effect.
TimeZoneRule(const TimeZoneRule &source)
Copy constructor.
TimeZoneRule & operator=(const TimeZoneRule &right)
Assignment operator.
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
C++ API: Rule for specifying date and time in an year.
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
C++ API: Unicode String.
C++ API: Common ICU base class UObject.
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:415
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:301
double UDate
Date and Time data type.
Definition: utypes.h:203