ICU 59.1  59.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 
36 #if !UCONFIG_NO_FORMATTING
37 
38 #include "unicode/basictz.h"
39 
41 
42 // forward declaration
43 class InitialTimeZoneRule;
44 class TimeZoneTransition;
45 class AnnualTimeZoneRule;
46 
64 public:
65 
77  enum TimeMode {
78  WALL_TIME = 0,
79  STANDARD_TIME,
80  UTC_TIME
81  };
82 
88  SimpleTimeZone(const SimpleTimeZone& source);
89 
96 
101  virtual ~SimpleTimeZone();
102 
112  virtual UBool operator==(const TimeZone& that) const;
113 
125  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
126 
162  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
163  int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
164  int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
165  int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
166  int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
167  UErrorCode& status);
205  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
206  int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
207  int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
208  int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
209  int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
210  int32_t savingsDST, UErrorCode& status);
211 
253  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
254  int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
255  int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
256  TimeMode savingsStartTimeMode,
257  int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
258  int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
259  int32_t savingsDST, UErrorCode& status);
260 
269  void setStartYear(int32_t year);
270 
313  void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
314  int32_t time, UErrorCode& status);
359  void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
360  int32_t time, TimeMode mode, UErrorCode& status);
361 
373  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
374  UErrorCode& status);
388  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
389  TimeMode mode, UErrorCode& status);
390 
407  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
408  int32_t time, UBool after, UErrorCode& status);
427  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
428  int32_t time, TimeMode mode, UBool after, UErrorCode& status);
429 
452  void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
453  int32_t time, UErrorCode& status);
454 
479  void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
480  int32_t time, TimeMode mode, UErrorCode& status);
481 
493  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
494 
508  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
509  TimeMode mode, UErrorCode& status);
510 
527  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
528  int32_t time, UBool after, UErrorCode& status);
529 
548  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
549  int32_t time, TimeMode mode, UBool after, UErrorCode& status);
550 
571  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
572  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
573 
589  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
590  uint8_t dayOfWeek, int32_t milliseconds,
591  int32_t monthLength, UErrorCode& status) const;
608  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
609  uint8_t dayOfWeek, int32_t milliseconds,
610  int32_t monthLength, int32_t prevMonthLength,
611  UErrorCode& status) const;
612 
618  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
619  int32_t& dstOffset, UErrorCode& ec) const;
620 
625  virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
626  int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
627 
635  virtual int32_t getRawOffset(void) const;
636 
644  virtual void setRawOffset(int32_t offsetMillis);
645 
654  void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
655 
663  virtual int32_t getDSTSavings(void) const;
664 
671  virtual UBool useDaylightTime(void) const;
672 
687  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
688 
695  UBool hasSameRules(const TimeZone& other) const;
696 
704  virtual TimeZone* clone(void) const;
705 
714  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
715 
724  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
725 
734  virtual int32_t countTransitionRules(UErrorCode& status) const;
735 
752  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
753  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
754 
755 
756 public:
757 
768  virtual UClassID getDynamicClassID(void) const;
769 
781  static UClassID U_EXPORT2 getStaticClassID(void);
782 
783 private:
787  enum EMode
788  {
789  DOM_MODE = 1,
790  DOW_IN_MONTH_MODE,
791  DOW_GE_DOM_MODE,
792  DOW_LE_DOM_MODE
793  };
794 
795  SimpleTimeZone(); // default constructor not implemented
796 
816  void construct(int32_t rawOffsetGMT,
817  int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
818  int32_t startTime, TimeMode startTimeMode,
819  int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
820  int32_t endTime, TimeMode endTimeMode,
821  int32_t dstSavings, UErrorCode& status);
822 
832  static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
833  int8_t dayOfMonth,
834  int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
835  EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
836  int8_t ruleDay, int32_t ruleMillis);
837 
853  void decodeRules(UErrorCode& status);
854  void decodeStartRule(UErrorCode& status);
855  void decodeEndRule(UErrorCode& status);
856 
857  int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts
858  int32_t startTime;
859  TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
860  int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
861  int32_t endTime;
862  int32_t startYear; // the year these DST rules took effect
863  int32_t rawOffset; // the TimeZone's raw GMT offset
864  UBool useDaylight; // flag indicating whether this TimeZone uses DST
865  static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
866  EMode startMode, endMode; // flags indicating what kind of rules the DST rules are
867 
872  int32_t dstSavings;
873 
874  /* Private for BasicTimeZone implementation */
875  void checkTransitionRules(UErrorCode& status) const;
876  void initTransitionRules(UErrorCode& status);
877  void clearTransitionRules(void);
878  void deleteTransitionRules(void);
879  UBool transitionRulesInitialized;
880  InitialTimeZoneRule* initialRule;
881  TimeZoneTransition* firstTransition;
882  AnnualTimeZoneRule* stdRule;
883  AnnualTimeZoneRule* dstRule;
884 };
885 
886 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
887  int32_t dayOfWeek,
888  int32_t time, UErrorCode& status) {
889  setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
890 }
891 
892 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
893  int32_t time,
894  UErrorCode& status) {
895  setStartRule(month, dayOfMonth, time, WALL_TIME, status);
896 }
897 
898 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
899  int32_t dayOfWeek,
900  int32_t time, UBool after, UErrorCode& status) {
901  setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
902 }
903 
904 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
905  int32_t dayOfWeek,
906  int32_t time, UErrorCode& status) {
907  setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
908 }
909 
910 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
911  int32_t time, UErrorCode& status) {
912  setEndRule(month, dayOfMonth, time, WALL_TIME, status);
913 }
914 
915 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
916  int32_t time, UBool after, UErrorCode& status) {
917  setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
918 }
919 
920 inline void
921 SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
922  int32_t& dstOffsetRef, UErrorCode& ec) const {
923  TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
924 }
925 
927 
928 #endif /* #if !UCONFIG_NO_FORMATTING */
929 
930 #endif // _SIMPLETZ
virtual UBool useDaylightTime(void) const =0
Queries if this time zone uses daylight savings time.
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the most recent time zone transition before 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 =0
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
double UDate
Date and Time data type.
Definition: utypes.h:203
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, UErrorCode &status)
Sets the daylight savings starting rule.
Definition: simpletz.h:886
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:93
static UClassID getStaticClassID(void)
Return the class ID for this class.
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
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:131
C++ API: ICU TimeZone base class.
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:360
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:34
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:200
TimeMode
TimeMode is used, together with a millisecond offset after midnight, to specify a rule transition tim...
Definition: simpletz.h:77
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:131
virtual TimeZone * clone(void) const =0
Clones TimeZone objects polymorphically.
virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, int32_t &rawOffset, int32_t &dstOffset, UErrorCode &status) const
Get time zone offsets from local wall time.
TimeZoneTransition is a class representing a time zone transition.
Definition: tztrans.h:33
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
virtual int32_t getDSTSavings() const
Returns the amount of time to be added to local standard time to get local wall clock time...
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:36
AnnualTimeZoneRule is a class used for representing a time zone rule which takes effect annually...
Definition: tzrule.h:378
SimpleTimeZone is a concrete subclass of TimeZone that represents a time zone for use with a Gregoria...
Definition: simpletz.h:63
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:132
void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, int32_t time, UErrorCode &status)
Sets the daylight savings ending rule.
Definition: simpletz.h:904
virtual void setRawOffset(int32_t offsetMillis)=0
Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local time...
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:396
virtual void getTimeZoneRules(const InitialTimeZoneRule *&initial, const TimeZoneRule *trsrules[], int32_t &trscount, UErrorCode &status) const =0
Gets the InitialTimeZoneRule and the set of TimeZoneRule which represent time transitions for this ti...
virtual UBool hasSameRules(const TimeZone &other) const
Returns true if this zone has the same rule and offset as another zone.
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the first time zone transition after the base time.
virtual int32_t countTransitionRules(UErrorCode &status) const =0
Returns the number of TimeZoneRules which represents time transitions, for this time zone...
virtual int32_t getRawOffset(void) const =0
Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local ti...
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const =0
Queries if the given date is in daylight savings time in this time zone.
int8_t UBool
The ICU boolean type.
Definition: umachine.h:236