Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

simpletz.h

00001 /*
00002 * Copyright (C) {1997-2003}, International Business Machines Corporation and others. All Rights Reserved.
00003 *                                                                              *
00004 ********************************************************************************
00005 *
00006 * File SIMPLETZ.H
00007 *
00008 * Modification History:
00009 *
00010 *   Date        Name        Description
00011 *   04/21/97    aliu        Overhauled header.
00012 *    08/10/98    stephen        JDK 1.2 sync
00013 *                            Added setStartRule() / setEndRule() overloads
00014 *                            Added hasSameRules()
00015 *    09/02/98    stephen        Added getOffset(monthLen)
00016 *                            Changed getOffset() to take UErrorCode
00017 *    07/09/99    stephen     Removed millisPerHour (unused, for HP compiler)
00018 *   12/02/99    aliu        Added TimeMode and constructor and setStart/EndRule
00019 *                           methods that take TimeMode. Added to docs.
00020 ********************************************************************************
00021 */
00022 
00023 #ifndef SIMPLETZ_H
00024 #define SIMPLETZ_H
00025 
00026 #include "unicode/utypes.h"
00027 
00028 #if !UCONFIG_NO_FORMATTING
00029 
00030 #include "unicode/timezone.h"
00031 
00032 U_NAMESPACE_BEGIN
00033 
00050 class U_I18N_API SimpleTimeZone: public TimeZone {
00051 public:
00052 
00064     enum TimeMode {
00065         WALL_TIME = 0,
00066         STANDARD_TIME,
00067         UTC_TIME
00068     };
00069 
00075     SimpleTimeZone(const SimpleTimeZone& source);
00076 
00082     SimpleTimeZone& operator=(const SimpleTimeZone& right);
00083 
00088     virtual ~SimpleTimeZone();
00089 
00099     virtual UBool operator==(const TimeZone& that) const;
00100 
00112     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
00113 
00149     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
00150         int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00151         int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00152         int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00153         int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
00154         UErrorCode& status);
00192     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
00193         int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00194         int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00195         int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00196         int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
00197         int32_t savingsDST, UErrorCode& status);
00198 
00240     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
00241         int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00242         int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00243         TimeMode savingsStartTimeMode,
00244         int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00245         int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
00246         int32_t savingsDST, UErrorCode& status);
00247 
00256     void setStartYear(int32_t year);
00257 
00298     void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00299                       int32_t time, UErrorCode& status);
00342     void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00343                       int32_t time, TimeMode mode, UErrorCode& status);
00344 
00356     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
00357                       UErrorCode& status);
00371     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
00372                       TimeMode mode, UErrorCode& status);
00373 
00390     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00391                       int32_t time, UBool after, UErrorCode& status);
00410     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00411                       int32_t time, TimeMode mode, UBool after, UErrorCode& status);
00412 
00435     void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00436                     int32_t time, UErrorCode& status);
00437 
00462     void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00463                     int32_t time, TimeMode mode, UErrorCode& status);
00464 
00476     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
00477 
00491     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
00492                     TimeMode mode, UErrorCode& status);
00493 
00510     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00511                     int32_t time, UBool after, UErrorCode& status);
00512 
00531     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00532                     int32_t time, TimeMode mode, UBool after, UErrorCode& status);
00533 
00554     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00555                               uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
00556 
00572     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00573                            uint8_t dayOfWeek, int32_t milliseconds,
00574                            int32_t monthLength, UErrorCode& status) const;
00591     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00592                               uint8_t dayOfWeek, int32_t milliseconds,
00593                               int32_t monthLength, int32_t prevMonthLength,
00594                               UErrorCode& status) const;
00595 
00601     virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
00602                            int32_t& dstOffset, UErrorCode& ec) const;
00603 
00611     virtual int32_t getRawOffset(void) const;
00612 
00620     virtual void setRawOffset(int32_t offsetMillis);
00621 
00630     void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
00631 
00639     int32_t getDSTSavings(void) const;
00640 
00647     virtual UBool useDaylightTime(void) const;
00648 
00663     virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00664 
00671     UBool hasSameRules(const TimeZone& other) const;
00672 
00680     virtual TimeZone* clone(void) const;
00681 
00682 public:
00683 
00694     virtual UClassID getDynamicClassID(void) const;
00695 
00707     static UClassID getStaticClassID(void);
00708 
00709 private:
00713     enum EMode
00714     {
00715         DOM_MODE = 1,
00716         DOW_IN_MONTH_MODE,
00717         DOW_GE_DOM_MODE,
00718         DOW_LE_DOM_MODE
00719     };
00720 
00721     SimpleTimeZone(); // default constructor not implemented
00722 
00742     void construct(int32_t rawOffsetGMT,
00743                    int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
00744                    int32_t startTime, TimeMode startTimeMode,
00745                    int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
00746                    int32_t endTime, TimeMode endTimeMode,
00747                    int32_t dstSavings, UErrorCode& status);
00748 
00758     static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
00759                                  int8_t dayOfMonth,
00760                                  int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
00761                                  EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
00762                                  int8_t ruleDay, int32_t ruleMillis);
00763 
00779     void decodeRules(UErrorCode& status);
00780     void decodeStartRule(UErrorCode& status);
00781     void decodeEndRule(UErrorCode& status);
00782 
00783     int8_t startMonth, startDay, startDayOfWeek;   // the month, day, DOW, and time DST starts
00784     int32_t startTime;
00785     TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
00786     int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
00787     int32_t endTime;
00788     int32_t startYear;  // the year these DST rules took effect
00789     int32_t rawOffset;  // the TimeZone's raw GMT offset
00790     UBool useDaylight; // flag indicating whether this TimeZone uses DST
00791     static const int8_t STATICMONTHLENGTH[12]; // lengths of the months
00792     EMode startMode, endMode;   // flags indicating what kind of rules the DST rules are
00793 
00798     int32_t dstSavings;
00799 };
00800 
00801 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
00802                                          int32_t dayOfWeek,
00803                                          int32_t time, UErrorCode& status) {
00804     setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
00805 }
00806 
00807 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
00808                                          int32_t time,
00809                                          UErrorCode& status) {
00810     setStartRule(month, dayOfMonth, time, WALL_TIME, status);
00811 }
00812 
00813 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
00814                                          int32_t dayOfWeek,
00815                                          int32_t time, UBool after, UErrorCode& status) {
00816     setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
00817 }
00818 
00819 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
00820                                        int32_t dayOfWeek,
00821                                        int32_t time, UErrorCode& status) {
00822     setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
00823 }
00824 
00825 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
00826                                        int32_t time, UErrorCode& status) {
00827     setEndRule(month, dayOfMonth, time, WALL_TIME, status);
00828 }
00829 
00830 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00831                                        int32_t time, UBool after, UErrorCode& status) {
00832     setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
00833 }
00834 
00835 inline void
00836 SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef,
00837                           int32_t& dstOffsetRef, UErrorCode& ec) const {
00838     TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec);
00839 }
00840 
00841 U_NAMESPACE_END
00842 
00843 #endif /* #if !UCONFIG_NO_FORMATTING */
00844 
00845 #endif // _SIMPLETZ

Generated on Tue Oct 26 18:11:09 2004 for ICU 2.8 by  doxygen 1.3.9.1