ICU 50.1.2  50.1.2
simpletz.h
Go to the documentation of this file.
1 /*
2  ********************************************************************************
3  * Copyright (C) 1997-2011, International Business Machines *
4  * Corporation and others. All Rights Reserved. *
5  ********************************************************************************
6  *
7  * File SIMPLETZ.H
8  *
9  * Modification History:
10  *
11  * Date Name Description
12  * 04/21/97 aliu Overhauled header.
13  * 08/10/98 stephen JDK 1.2 sync
14  * Added setStartRule() / setEndRule() overloads
15  * Added hasSameRules()
16  * 09/02/98 stephen Added getOffset(monthLen)
17  * Changed getOffset() to take UErrorCode
18  * 07/09/99 stephen Removed millisPerHour (unused, for HP compiler)
19  * 12/02/99 aliu Added TimeMode and constructor and setStart/EndRule
20  * methods that take TimeMode. Added to docs.
21  ********************************************************************************
22  */
23 
24 #ifndef SIMPLETZ_H
25 #define SIMPLETZ_H
26 
27 #include "unicode/utypes.h"
28 
34 #if !UCONFIG_NO_FORMATTING
35 
36 #include "unicode/basictz.h"
37 
39 
40 // forward declaration
41 class InitialTimeZoneRule;
42 class TimeZoneTransition;
43 class AnnualTimeZoneRule;
44 
62 public:
63 
75  enum TimeMode {
76  WALL_TIME = 0,
77  STANDARD_TIME,
78  UTC_TIME
79  };
80 
86  SimpleTimeZone(const SimpleTimeZone& source);
87 
94 
99  virtual ~SimpleTimeZone();
100 
110  virtual UBool operator==(const TimeZone& that) const;
111 
123  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
124 
160  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
161  int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
162  int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
163  int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
164  int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
165  UErrorCode& status);
203  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
204  int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
205  int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
206  int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
207  int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
208  int32_t savingsDST, UErrorCode& status);
209 
251  SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
252  int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
253  int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
254  TimeMode savingsStartTimeMode,
255  int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
256  int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
257  int32_t savingsDST, UErrorCode& status);
258 
267  void setStartYear(int32_t year);
268 
311  void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
312  int32_t time, UErrorCode& status);
357  void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
358  int32_t time, TimeMode mode, UErrorCode& status);
359 
371  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
372  UErrorCode& status);
386  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
387  TimeMode mode, UErrorCode& status);
388 
405  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
406  int32_t time, UBool after, UErrorCode& status);
425  void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
426  int32_t time, TimeMode mode, UBool after, UErrorCode& status);
427 
450  void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
451  int32_t time, UErrorCode& status);
452 
477  void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
478  int32_t time, TimeMode mode, UErrorCode& status);
479 
491  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
492 
506  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
507  TimeMode mode, UErrorCode& status);
508 
525  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
526  int32_t time, UBool after, UErrorCode& status);
527 
546  void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
547  int32_t time, TimeMode mode, UBool after, UErrorCode& status);
548 
569  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
570  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
571 
587  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
588  uint8_t dayOfWeek, int32_t milliseconds,
589  int32_t monthLength, UErrorCode& status) const;
606  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
607  uint8_t dayOfWeek, int32_t milliseconds,
608  int32_t monthLength, int32_t prevMonthLength,
609  UErrorCode& status) const;
610 
616  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
617  int32_t& dstOffset, UErrorCode& ec) const;
618 
623  virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
624  int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/;
625 
633  virtual int32_t getRawOffset(void) const;
634 
642  virtual void setRawOffset(int32_t offsetMillis);
643 
652  void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
653 
661  virtual int32_t getDSTSavings(void) const;
662 
669  virtual UBool useDaylightTime(void) const;
670 
685  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
686 
693  UBool hasSameRules(const TimeZone& other) const;
694 
702  virtual TimeZone* clone(void) const;
703 
712  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
713 
722  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
723 
732  virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
733 
750  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
751  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
752 
753 
754 public:
755 
766  virtual UClassID getDynamicClassID(void) const;
767 
779  static UClassID U_EXPORT2 getStaticClassID(void);
780 
781 private:
785  enum EMode
786  {
787  DOM_MODE = 1,
788  DOW_IN_MONTH_MODE,
789  DOW_GE_DOM_MODE,
790  DOW_LE_DOM_MODE
791  };
792 
793  SimpleTimeZone(); // default constructor not implemented
794 
814  void construct(int32_t rawOffsetGMT,
815  int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
816  int32_t startTime, TimeMode startTimeMode,
817  int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
818  int32_t endTime, TimeMode endTimeMode,
819  int32_t dstSavings, UErrorCode& status);
820 
830  static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
831  int8_t dayOfMonth,
832  int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
833  EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
834  int8_t ruleDay, int32_t ruleMillis);
835 
851  void decodeRules(UErrorCode& status);
852  void decodeStartRule(UErrorCode& status);
853  void decodeEndRule(UErrorCode& status);
854 
855  int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts
856  int32_t startTime;
857  TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
858  int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
859  int32_t endTime;
860  int32_t startYear; // the year these DST rules took effect
861  int32_t rawOffset; // the TimeZone's raw GMT offset
862  UBool useDaylight; // flag indicating whether this TimeZone uses DST
863  static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
864  EMode startMode, endMode; // flags indicating what kind of rules the DST rules are
865 
870  int32_t dstSavings;
871 
872  /* Private for BasicTimeZone implementation */
873  void initTransitionRules(UErrorCode& status);
874  void clearTransitionRules(void);
875  void deleteTransitionRules(void);
876  UBool transitionRulesInitialized;
877  InitialTimeZoneRule* initialRule;
878  TimeZoneTransition* firstTransition;
879  AnnualTimeZoneRule* stdRule;
880  AnnualTimeZoneRule* dstRule;
881 };
882 
883 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
884  int32_t dayOfWeek,
885  int32_t time, UErrorCode& status) {
886  setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
887 }
888 
889 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
890  int32_t time,
891  UErrorCode& status) {
892  setStartRule(month, dayOfMonth, time, WALL_TIME, status);
893 }
894 
895 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
896  int32_t dayOfWeek,
897  int32_t time, UBool after, UErrorCode& status) {
898  setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
899 }
900 
901 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
902  int32_t dayOfWeek,
903  int32_t time, UErrorCode& status) {
904  setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
905 }
906 
907 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
908  int32_t time, UErrorCode& status) {
909  setEndRule(month, dayOfMonth, time, WALL_TIME, status);
910 }
911 
912 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
913  int32_t time, UBool after, UErrorCode& status) {
914  setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
915 }
916 
917 inline void
918 SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
919  int32_t& dstOffsetRef, UErrorCode& ec) const {
920  TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
921 }
922 
924 
925 #endif /* #if !UCONFIG_NO_FORMATTING */
926 
927 #endif // _SIMPLETZ
virtual UBool useDaylightTime(void) const =0
Queries if this time zone uses daylight savings 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...
virtual void getTimeZoneRules(const InitialTimeZoneRule *&initial, const TimeZoneRule *trsrules[], int32_t &trscount, UErrorCode &status)=0
Gets the InitialTimeZoneRule and the set of TimeZoneRule which represent time transitions for this ti...
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result)=0
Gets the first time zone transition after the base time.
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
double UDate
Date and Time data type.
Definition: utypes.h:201
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
static UClassID getStaticClassID(void)
Return the class ID for this class.
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:129
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:358
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:32
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:198
TimeMode
TimeMode is used, together with a millisecond offset after midnight, to specify a rule transition tim...
Definition: simpletz.h:75
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
virtual TimeZone * clone(void) const =0
Clones TimeZone objects polymorphically.
virtual UBool hasSameRules(const TimeZone &other) const
Returns true if this zone has the same rule and offset as another zone.
virtual int32_t getDSTSavings() const
Returns the amount of time to be added to local standard time to get local wall clock time...
TimeZoneTransition is a class representing a time zone transition.
Definition: tztrans.h:31
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:34
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result)=0
Gets the most recent time zone transition before the base time.
virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, int32_t &rawOffset, int32_t &dstOffset, UErrorCode &status)
Get time zone offsets from local wall time.
SimpleTimeZone is a concrete subclass of TimeZone that represents a time zone for use with a Gregoria...
Definition: simpletz.h:61
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
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:476
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:246
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.
virtual int32_t countTransitionRules(UErrorCode &status)=0
Returns the number of TimeZoneRules which represents time transitions, for this time zone...
int8_t UBool
The ICU boolean type.
Definition: umachine.h:200