ICU 71.1 71.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
36 class U_I18N_API TimeZoneRule : public UObject {
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
76 UnicodeString& getName(UnicodeString& name) const;
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
188 TimeZoneRule& operator=(const TimeZoneRule& right);
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
202 class U_I18N_API InitialTimeZoneRule : public TimeZoneRule {
203 public:
213 InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
214
220 InitialTimeZoneRule(const InitialTimeZoneRule& source);
221
226 virtual ~InitialTimeZoneRule();
227
234 virtual InitialTimeZoneRule* clone() const override;
235
241 InitialTimeZoneRule& operator=(const InitialTimeZoneRule& right);
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
380 class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule {
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
431 AnnualTimeZoneRule(const AnnualTimeZoneRule& source);
432
437 virtual ~AnnualTimeZoneRule();
438
445 virtual AnnualTimeZoneRule* clone() const override;
446
452 AnnualTimeZoneRule& operator=(const AnnualTimeZoneRule& right);
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
620 class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule {
621 public:
639 TimeArrayTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
640 const UDate* startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType);
641
647 TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule& source);
648
653 virtual ~TimeArrayTimeZoneRule();
654
661 virtual TimeArrayTimeZoneRule* clone() const override;
662
668 TimeArrayTimeZoneRule& operator=(const TimeArrayTimeZoneRule& right);
669
677 virtual bool operator==(const TimeZoneRule& that) const override;
678
686 virtual bool operator!=(const TimeZoneRule& that) const override;
687
696 DateTimeRule::TimeRuleType getTimeType(void) const;
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
icu::TimeZoneRule::isEquivalentTo
virtual UBool isEquivalentTo(const TimeZoneRule &other) const
Returns if this rule represents the same rule and offsets as another.
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
icu::TimeArrayTimeZoneRule
TimeArrayTimeZoneRule represents a time zone rule whose start times are defined by an array of millis...
Definition: tzrule.h:620
U_I18N_API
#define U_I18N_API
Definition: utypes.h:301
icu::AnnualTimeZoneRule::MAX_YEAR
static const int32_t MAX_YEAR
The constant representing the maximum year used for designating a rule is permanent.
Definition: tzrule.h:386
UBool
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
icu::operator==
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
icu::TimeZoneRule
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:36
dtrule.h
C++ API: Rule for specifying date and time in an year.
icu::TimeZoneRule::getPreviousStart
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.
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:295
icu::TimeZoneRule::operator=
TimeZoneRule & operator=(const TimeZoneRule &right)
Assignment operator.
icu::AnnualTimeZoneRule
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually.
Definition: tzrule.h:380
icu::UObject
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
icu::TimeZoneRule::getFinalStart
virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const =0
Gets the final time when this rule takes effect.
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
UErrorCode
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
icu::UObject::getDynamicClassID
virtual UClassID getDynamicClassID() const
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
icu::DateTimeRule::TimeRuleType
TimeRuleType
Time rule type constants.
Definition: dtrule.h:55
icu::TimeZoneRule::operator!=
virtual bool operator!=(const TimeZoneRule &that) const
Return true if the given TimeZoneRule objects are semantically unequal.
icu::InitialTimeZoneRule
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:202
icu::TimeZoneRule::operator==
virtual bool operator==(const TimeZoneRule &that) const
Return true if the given TimeZoneRule objects are semantically equal.
icu::operator!=
bool operator!=(const StringPiece &x, const StringPiece &y)
Global operator != for StringPiece.
Definition: stringpiece.h:335
UDate
double UDate
Date and Time data type.
Definition: utypes.h:203
uobject.h
C++ API: Common ICU base class UObject.
icu::TimeZoneRule::getFirstStart
virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &result) const =0
Gets the very first time when this rule takes effect.
icu::DateTimeRule
DateTimeRule is a class representing a time in a year by a rule specified by month,...
Definition: dtrule.h:33
icu::TimeZoneRule::getNextStart
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.
unistr.h
C++ API: Unicode String.
icu::TimeZoneRule::clone
virtual TimeZoneRule * clone() const =0
Clone this TimeZoneRule object polymorphically.