ICU 62.1  62.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 
655  void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
656 
665  virtual int32_t getDSTSavings(void) const;
666 
673  virtual UBool useDaylightTime(void) const;
674 
689  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
690 
697  UBool hasSameRules(const TimeZone& other) const;
698 
706  virtual TimeZone* clone(void) const;
707 
716  virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
717 
726  virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
727 
736  virtual int32_t countTransitionRules(UErrorCode& status) const;
737 
754  virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
755  const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
756 
757 
758 public:
759 
770  virtual UClassID getDynamicClassID(void) const;
771 
783  static UClassID U_EXPORT2 getStaticClassID(void);
784 
785 private:
789  enum EMode
790  {
791  DOM_MODE = 1,
792  DOW_IN_MONTH_MODE,
793  DOW_GE_DOM_MODE,
794  DOW_LE_DOM_MODE
795  };
796 
797  SimpleTimeZone(); // default constructor not implemented
798 
818  void construct(int32_t rawOffsetGMT,
819  int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
820  int32_t startTime, TimeMode startTimeMode,
821  int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
822  int32_t endTime, TimeMode endTimeMode,
823  int32_t dstSavings, UErrorCode& status);
824 
834  static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
835  int8_t dayOfMonth,
836  int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
837  EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
838  int8_t ruleDay, int32_t ruleMillis);
839 
855  void decodeRules(UErrorCode& status);
856  void decodeStartRule(UErrorCode& status);
857  void decodeEndRule(UErrorCode& status);
858 
859  int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts
860  int32_t startTime;
861  TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
862  int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
863  int32_t endTime;
864  int32_t startYear; // the year these DST rules took effect
865  int32_t rawOffset; // the TimeZone's raw GMT offset
866  UBool useDaylight; // flag indicating whether this TimeZone uses DST
867  static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
868  EMode startMode, endMode; // flags indicating what kind of rules the DST rules are
869 
874  int32_t dstSavings;
875 
876  /* Private for BasicTimeZone implementation */
877  void checkTransitionRules(UErrorCode& status) const;
878  void initTransitionRules(UErrorCode& status);
879  void clearTransitionRules(void);
880  void deleteTransitionRules(void);
881  UBool transitionRulesInitialized;
882  InitialTimeZoneRule* initialRule;
883  TimeZoneTransition* firstTransition;
884  AnnualTimeZoneRule* stdRule;
885  AnnualTimeZoneRule* dstRule;
886 };
887 
888 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
889  int32_t dayOfWeek,
890  int32_t time, UErrorCode& status) {
891  setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
892 }
893 
894 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
895  int32_t time,
896  UErrorCode& status) {
897  setStartRule(month, dayOfMonth, time, WALL_TIME, status);
898 }
899 
900 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
901  int32_t dayOfWeek,
902  int32_t time, UBool after, UErrorCode& status) {
903  setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
904 }
905 
906 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
907  int32_t dayOfWeek,
908  int32_t time, UErrorCode& status) {
909  setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
910 }
911 
912 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
913  int32_t time, UErrorCode& status) {
914  setEndRule(month, dayOfMonth, time, WALL_TIME, status);
915 }
916 
917 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
918  int32_t time, UBool after, UErrorCode& status) {
919  setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
920 }
921 
922 inline void
923 SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
924  int32_t& dstOffsetRef, UErrorCode& ec) const {
925  TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
926 }
927 
929 
930 #endif /* #if !UCONFIG_NO_FORMATTING */
931 
932 #endif // _SIMPLETZ
icu::TimeZone::getDSTSavings
virtual int32_t getDSTSavings() const
Returns the amount of time to be added to local standard time to get local wall clock time.
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
icu::TimeZone::inDaylightTime
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const =0
Queries if the given date is in daylight savings time in this time zone.
U_I18N_API
#define U_I18N_API
Definition: utypes.h:360
icu::TimeZone::setRawOffset
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,...
UBool
int8_t UBool
The ICU boolean type.
Definition: umachine.h:236
icu::TimeZone::operator==
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
icu::BasicTimeZone
BasicTimeZone is an abstract class extending TimeZone.
Definition: basictz.h:36
icu::TimeZoneRule
TimeZoneRule is a class representing a rule for time zone.
Definition: tzrule.h:34
icu::TimeZone
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:131
icu::TimeZone::getStaticClassID
static UClassID getStaticClassID(void)
Return the class ID for this class.
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:286
icu::BasicTimeZone::getNextTransition
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the first time zone transition after the base time.
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:93
UErrorCode
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition: utypes.h:396
basictz.h
C++ API: ICU TimeZone base class.
icu::TimeZone::getOffset
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...
icu::SimpleTimeZone
SimpleTimeZone is a concrete subclass of TimeZone that represents a time zone for use with a Gregoria...
Definition: simpletz.h:63
icu::TimeZone::getDynamicClassID
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
icu::InitialTimeZoneRule
InitialTimeZoneRule represents a time zone rule representing a time zone effective from the beginning...
Definition: tzrule.h:200
icu::BasicTimeZone::countTransitionRules
virtual int32_t countTransitionRules(UErrorCode &status) const =0
Returns the number of TimeZoneRules which represents time transitions, for this time zone,...
icu::TimeZone::operator=
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
icu::TimeZoneTransition
TimeZoneTransition is a class representing a time zone transition.
Definition: tztrans.h:33
icu::SimpleTimeZone::TimeMode
TimeMode
TimeMode is used, together with a millisecond offset after midnight, to specify a rule transition tim...
Definition: simpletz.h:77
icu::BasicTimeZone::getOffsetFromLocal
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.
UDate
double UDate
Date and Time data type.
Definition: utypes.h:203
icu::TimeZone::clone
virtual TimeZone * clone(void) const =0
Clones TimeZone objects polymorphically.
icu::TimeZone::useDaylightTime
virtual UBool useDaylightTime(void) const =0
Queries if this time zone uses daylight savings time.
icu::TimeZone::hasSameRules
virtual UBool hasSameRules(const TimeZone &other) const
Returns true if this zone has the same rule and offset as another zone.
U_NAMESPACE_END
#define U_NAMESPACE_END
Definition: uversion.h:138
U_NAMESPACE_BEGIN
#define U_NAMESPACE_BEGIN
Definition: uversion.h:137
icu::BasicTimeZone::getPreviousTransition
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &result) const =0
Gets the most recent time zone transition before the base time.
icu::BasicTimeZone::getTimeZoneRules
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...
icu::TimeZone::getRawOffset
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...