ICU 70.1 70.1
simpletz.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) 1997-2013, International Business Machines *
6 * Corporation and others. All Rights Reserved. *
7 ********************************************************************************
8 *
9 * File SIMPLETZ.H
10 *
11 * Modification History:
12 *
13 * Date Name Description
14 * 04/21/97 aliu Overhauled header.
15 * 08/10/98 stephen JDK 1.2 sync
16 * Added setStartRule() / setEndRule() overloads
17 * Added hasSameRules()
18 * 09/02/98 stephen Added getOffset(monthLen)
19 * Changed getOffset() to take UErrorCode
20 * 07/09/99 stephen Removed millisPerHour (unused, for HP compiler)
21 * 12/02/99 aliu Added TimeMode and constructor and setStart/EndRule
22 * methods that take TimeMode. Added to docs.
23 ********************************************************************************
24 */
25
26#ifndef SIMPLETZ_H
27#define SIMPLETZ_H
28
29#include "unicode/utypes.h"
30
31#if U_SHOW_CPLUSPLUS_API
32
38#if !UCONFIG_NO_FORMATTING
39
40#include "unicode/basictz.h"
41
42U_NAMESPACE_BEGIN
43
44// forward declaration
45class InitialTimeZoneRule;
46class TimeZoneTransition;
47class AnnualTimeZoneRule;
48
66public:
67
79 enum TimeMode {
80 WALL_TIME = 0,
81 STANDARD_TIME,
82 UTC_TIME
83 };
84
91
98
104
114 virtual bool operator==(const TimeZone& that) const override;
115
127 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
128
164 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
165 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
166 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
167 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
168 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
169 UErrorCode& status);
207 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
208 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
209 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
210 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
211 int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
212 int32_t savingsDST, UErrorCode& status);
213
255 SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
256 int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
257 int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
258 TimeMode savingsStartTimeMode,
259 int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
260 int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
261 int32_t savingsDST, UErrorCode& status);
262
271 void setStartYear(int32_t year);
272
315 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
316 int32_t time, UErrorCode& status);
361 void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
362 int32_t time, TimeMode mode, UErrorCode& status);
363
375 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
376 UErrorCode& status);
390 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
391 TimeMode mode, UErrorCode& status);
392
409 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
410 int32_t time, UBool after, UErrorCode& status);
429 void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
430 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
431
454 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
455 int32_t time, UErrorCode& status);
456
481 void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
482 int32_t time, TimeMode mode, UErrorCode& status);
483
495 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
496
510 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
511 TimeMode mode, UErrorCode& status);
512
529 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
530 int32_t time, UBool after, UErrorCode& status);
531
550 void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
551 int32_t time, TimeMode mode, UBool after, UErrorCode& status);
552
573 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
574 uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const override;
575
591 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
592 uint8_t dayOfWeek, int32_t milliseconds,
593 int32_t monthLength, UErrorCode& status) const override;
610 virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
611 uint8_t dayOfWeek, int32_t milliseconds,
612 int32_t monthLength, int32_t prevMonthLength,
613 UErrorCode& status) const;
614
620 virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
621 int32_t& dstOffset, UErrorCode& ec) const override;
622
623#ifndef U_FORCE_HIDE_DRAFT_API
628 virtual void getOffsetFromLocal(
629 UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
630 UTimeZoneLocalOption duplicatedTimeOpt,
631 int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
632#endif /* U_FORCE_HIDE_DRAFT_API */
633
641 virtual int32_t getRawOffset(void) const override;
642
650 virtual void setRawOffset(int32_t offsetMillis) override;
651
661 void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
662
671 virtual int32_t getDSTSavings(void) const override;
672
679 virtual UBool useDaylightTime(void) const override;
680
681#ifndef U_FORCE_HIDE_DEPRECATED_API
696 virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override;
697#endif // U_FORCE_HIDE_DEPRECATED_API
698
705 UBool hasSameRules(const TimeZone& other) const override;
706
714 virtual SimpleTimeZone* clone() const override;
715
724 virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
725
734 virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
735
744 virtual int32_t countTransitionRules(UErrorCode& status) const override;
745
762 virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
763 const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
764
765
766public:
767
778 virtual UClassID getDynamicClassID(void) const override;
779
791 static UClassID U_EXPORT2 getStaticClassID(void);
792
793private:
797 enum EMode
798 {
799 DOM_MODE = 1,
800 DOW_IN_MONTH_MODE,
801 DOW_GE_DOM_MODE,
802 DOW_LE_DOM_MODE
803 };
804
805 SimpleTimeZone(); // default constructor not implemented
806
826 void construct(int32_t rawOffsetGMT,
827 int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
828 int32_t startTime, TimeMode startTimeMode,
829 int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
830 int32_t endTime, TimeMode endTimeMode,
831 int32_t dstSavings, UErrorCode& status);
832
842 static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
843 int8_t dayOfMonth,
844 int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
845 EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
846 int8_t ruleDay, int32_t ruleMillis);
847
863 void decodeRules(UErrorCode& status);
864 void decodeStartRule(UErrorCode& status);
865 void decodeEndRule(UErrorCode& status);
866
867 int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts
868 int32_t startTime;
869 TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
870 int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
871 int32_t endTime;
872 int32_t startYear; // the year these DST rules took effect
873 int32_t rawOffset; // the TimeZone's raw GMT offset
874 UBool useDaylight; // flag indicating whether this TimeZone uses DST
875 static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
876 EMode startMode, endMode; // flags indicating what kind of rules the DST rules are
877
882 int32_t dstSavings;
883
884 /* Private for BasicTimeZone implementation */
885 void checkTransitionRules(UErrorCode& status) const;
886 void initTransitionRules(UErrorCode& status);
887 void clearTransitionRules(void);
888 void deleteTransitionRules(void);
889 UBool transitionRulesInitialized;
890 InitialTimeZoneRule* initialRule;
891 TimeZoneTransition* firstTransition;
892 AnnualTimeZoneRule* stdRule;
893 AnnualTimeZoneRule* dstRule;
894};
895
896inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
897 int32_t dayOfWeek,
898 int32_t time, UErrorCode& status) {
899 setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
900}
901
902inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
903 int32_t time,
904 UErrorCode& status) {
905 setStartRule(month, dayOfMonth, time, WALL_TIME, status);
906}
907
908inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
909 int32_t dayOfWeek,
910 int32_t time, UBool after, UErrorCode& status) {
911 setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
912}
913
914inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
915 int32_t dayOfWeek,
916 int32_t time, UErrorCode& status) {
917 setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
918}
919
920inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
921 int32_t time, UErrorCode& status) {
922 setEndRule(month, dayOfMonth, time, WALL_TIME, status);
923}
924
925inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
926 int32_t time, UBool after, UErrorCode& status) {
927 setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
928}
929
930inline void
931SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
932 int32_t& dstOffsetRef, UErrorCode& ec) const {
933 TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
934}
935
936U_NAMESPACE_END
937
938#endif /* #if !UCONFIG_NO_FORMATTING */
939
940#endif /* U_SHOW_CPLUSPLUS_API */
941
942#endif // _SIMPLETZ
C++ API: ICU TimeZone base class.
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually.
Definition: tzrule.h:380
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
SimpleTimeZone is a concrete subclass of TimeZone that represents a time zone for use with a Gregoria...
Definition: simpletz.h:65
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID, int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, int8_t savingsStartDayOfWeek, int32_t savingsStartTime, int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, int8_t savingsEndDayOfWeek, int32_t savingsEndTime, int32_t savingsDST, UErrorCode &status)
Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, and times to start and end da...
TimeMode
TimeMode is used, together with a millisecond offset after midnight, to specify a rule transition tim...
Definition: simpletz.h:79
void setStartYear(int32_t year)
Sets the daylight savings starting year, that is, the year this time zone began observing its specifi...
virtual bool operator==(const TimeZone &that) const override
Returns true if the two TimeZone objects are equal; that is, they have the same ID,...
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const override
Returns true if the given date is within the period when daylight savings time is in effect; false ot...
virtual int32_t countTransitionRules(UErrorCode &status) const override
Returns the number of TimeZoneRules which represents time transitions, for this time zone,...
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t milliseconds, int32_t monthLength, int32_t prevMonthLength, UErrorCode &status) const
Gets the time zone offset, for current date, modified in case of daylight savings.
virtual UBool useDaylightTime(void) const override
Queries if this TimeZone uses Daylight Savings Time.
void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UErrorCode &status)
Sets the daylight savings ending rule.
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 getDSTSavings(void) const override
Returns the amount of time in ms that the clock is advanced during DST.
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 int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t milliseconds, int32_t monthLength, UErrorCode &status) const override
Gets the time zone offset, for current date, modified in case of daylight savings.
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const override
Gets the most recent time zone transition before the base time.
SimpleTimeZone & operator=(const SimpleTimeZone &right)
Default assignment operator.
static UClassID getStaticClassID(void)
Return the class ID for this class.
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID, int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, int8_t savingsStartDayOfWeek, int32_t savingsStartTime, TimeMode savingsStartTimeMode, int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode, int32_t savingsDST, UErrorCode &status)
Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, and times to start and end da...
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const override
Gets the first time zone transition after 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 override
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UErrorCode &status)
Sets the daylight savings starting rule.
virtual int32_t getRawOffset(void) const override
Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local ti...
virtual UClassID getDynamicClassID(void) const override
Override TimeZone Returns a unique class ID POLYMORPHICALLY.
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, TimeMode mode, UErrorCode &status)
Sets the DST end rule to a fixed date within a month.
void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode &status)
Sets the amount of time in ms that the clock is advanced during DST.
SimpleTimeZone(const SimpleTimeZone &source)
Copy constructor.
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 ~SimpleTimeZone()
Destructor.
void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UBool after, UErrorCode &status)
Sets the DST end rule to a weekday before or after a give date within a month, e.g....
virtual SimpleTimeZone * clone() const override
Clones TimeZone objects polymorphically.
UBool hasSameRules(const TimeZone &other) const override
Return true if this zone has the same rules and offset as another zone.
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID)
Constructs a SimpleTimeZone with the given raw GMT offset and time zone ID, and which doesn't observe...
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, int32_t time, TimeMode mode, UBool after, UErrorCode &status)
Sets the DST start rule to a weekday before or after a give date within a month, e....
SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString &ID, int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, int8_t savingsStartDayOfWeek, int32_t savingsStartTime, int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, int8_t savingsEndDayOfWeek, int32_t savingsEndTime, UErrorCode &status)
Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, and times to start and end da...
void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time, TimeMode mode, UErrorCode &status)
Sets the DST start rule to a fixed date within a month.
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
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...
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:1627
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
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