ICU 71.1  71.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 
42 U_NAMESPACE_BEGIN
43 
44 // forward declaration
45 class InitialTimeZoneRule;
46 class TimeZoneTransition;
47 class AnnualTimeZoneRule;
48 
66 public:
67 
79  enum TimeMode {
80  WALL_TIME = 0,
81  STANDARD_TIME,
82  UTC_TIME
83  };
84 
91 
98 
103  virtual ~SimpleTimeZone();
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 
627  virtual void getOffsetFromLocal(
628  UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
629  UTimeZoneLocalOption duplicatedTimeOpt,
630  int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
631 
639  virtual int32_t getRawOffset(void) const override;
640 
648  virtual void setRawOffset(int32_t offsetMillis) override;
649 
659  void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
660 
669  virtual int32_t getDSTSavings(void) const override;
670 
677  virtual UBool useDaylightTime(void) const override;
678 
679 #ifndef U_FORCE_HIDE_DEPRECATED_API
694  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override;
695 #endif // U_FORCE_HIDE_DEPRECATED_API
696 
703  UBool hasSameRules(const TimeZone& other) const override;
704 
712  virtual SimpleTimeZone* clone() const override;
713 
722  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
723 
732  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
733 
742  virtual int32_t countTransitionRules(UErrorCode& status) const override;
743 
760  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
761  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
762 
763 
764 public:
765 
776  virtual UClassID getDynamicClassID(void) const override;
777 
789  static UClassID U_EXPORT2 getStaticClassID(void);
790 
791 private:
795  enum EMode
796  {
797  DOM_MODE = 1,
798  DOW_IN_MONTH_MODE,
799  DOW_GE_DOM_MODE,
800  DOW_LE_DOM_MODE
801  };
802 
803  SimpleTimeZone(); // default constructor not implemented
804 
824  void construct(int32_t rawOffsetGMT,
825  int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
826  int32_t startTime, TimeMode startTimeMode,
827  int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
828  int32_t endTime, TimeMode endTimeMode,
829  int32_t dstSavings, UErrorCode& status);
830 
840  static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
841  int8_t dayOfMonth,
842  int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
843  EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
844  int8_t ruleDay, int32_t ruleMillis);
845 
861  void decodeRules(UErrorCode& status);
862  void decodeStartRule(UErrorCode& status);
863  void decodeEndRule(UErrorCode& status);
864 
865  int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts
866  int32_t startTime;
867  TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
868  int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
869  int32_t endTime;
870  int32_t startYear; // the year these DST rules took effect
871  int32_t rawOffset; // the TimeZone's raw GMT offset
872  UBool useDaylight; // flag indicating whether this TimeZone uses DST
873  static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
874  EMode startMode, endMode; // flags indicating what kind of rules the DST rules are
875 
880  int32_t dstSavings;
881 
882  /* Private for BasicTimeZone implementation */
883  void checkTransitionRules(UErrorCode& status) const;
884  void initTransitionRules(UErrorCode& status);
885  void clearTransitionRules(void);
886  void deleteTransitionRules(void);
887  UBool transitionRulesInitialized;
888  InitialTimeZoneRule* initialRule;
889  TimeZoneTransition* firstTransition;
890  AnnualTimeZoneRule* stdRule;
891  AnnualTimeZoneRule* dstRule;
892 };
893 
894 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
895  int32_t dayOfWeek,
896  int32_t time, UErrorCode& status) {
897  setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
898 }
899 
900 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
901  int32_t time,
902  UErrorCode& status) {
903  setStartRule(month, dayOfMonth, time, WALL_TIME, status);
904 }
905 
906 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
907  int32_t dayOfWeek,
908  int32_t time, UBool after, UErrorCode& status) {
909  setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
910 }
911 
912 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
913  int32_t dayOfWeek,
914  int32_t time, UErrorCode& status) {
915  setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
916 }
917 
918 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
919  int32_t time, UErrorCode& status) {
920  setEndRule(month, dayOfMonth, time, WALL_TIME, status);
921 }
922 
923 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
924  int32_t time, UBool after, UErrorCode& status) {
925  setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
926 }
927 
928 inline void
929 SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
930  int32_t& dstOffsetRef, UErrorCode& ec) const {
931  TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
932 }
933 
934 U_NAMESPACE_END
935 
936 #endif /* #if !UCONFIG_NO_FORMATTING */
937 
938 #endif /* U_SHOW_CPLUSPLUS_API */
939 
940 #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,...
SimpleTimeZone & operator=(const SimpleTimeZone &right)
Default assignment operator.
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 SimpleTimeZone * 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 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.
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....
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:1626
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