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

simpletz.h

00001 /*
00002 * Copyright (C) {1997-1999}, 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/timezone.h"
00027 
00028 struct StandardZone;
00029 struct DSTZone;
00030 
00031 U_NAMESPACE_BEGIN
00032 
00033 class TimeZone;
00034 
00051 class U_I18N_API SimpleTimeZone: public TimeZone {
00052 public:
00053 
00064     enum TimeMode {
00065         WALL_TIME = 0,
00066         STANDARD_TIME,
00067         UTC_TIME
00068     };
00069 
00074     SimpleTimeZone(const SimpleTimeZone& source);
00075 
00080     SimpleTimeZone& operator=(const SimpleTimeZone& right);
00081 
00086     virtual ~SimpleTimeZone();
00087 
00097     virtual UBool operator==(const TimeZone& that) const;
00098 
00110     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID);
00111 
00153     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
00154         int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00155         int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00156         int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00157         int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
00158         UErrorCode& status);
00159 
00160     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
00161         int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00162         int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00163         int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00164         int8_t savingsEndDayOfWeek, int32_t savingsEndTime,
00165         int32_t savingsDST, UErrorCode& status);
00166 
00167     SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID,
00168         int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth,
00169         int8_t savingsStartDayOfWeek, int32_t savingsStartTime,
00170         TimeMode savingsStartTimeMode,
00171         int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth,
00172         int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode,
00173         int32_t savingsDST, UErrorCode& status);
00174 
00183     void setStartYear(int32_t year);
00184 
00227     void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00228                       int32_t time, UErrorCode& status);
00229 
00230     void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00231                       int32_t time, TimeMode mode, UErrorCode& status);
00232 
00246     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
00247                       UErrorCode& status);
00248 
00249     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time,
00250                       TimeMode mode, UErrorCode& status);
00251 
00270     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00271                       int32_t time, UBool after, UErrorCode& status);
00272 
00273     void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00274                       int32_t time, TimeMode mode, UBool after, UErrorCode& status);
00275 
00300     void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00301                     int32_t time, UErrorCode& status);
00302 
00303     void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek,
00304                     int32_t time, TimeMode mode, UErrorCode& status);
00305 
00319     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status);
00320 
00321     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time,
00322                     TimeMode mode, UErrorCode& status);
00323 
00342     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00343                     int32_t time, UBool after, UErrorCode& status);
00344 
00345     void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00346                     int32_t time, TimeMode mode, UBool after, UErrorCode& status);
00347 
00367     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00368                               uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
00369 
00370     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00371                               uint8_t dayOfWeek, int32_t millis) const;
00372 
00388     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00389                            uint8_t dayOfWeek, int32_t milliseconds,
00390                            int32_t monthLength, UErrorCode& status) const;
00391 
00392     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
00393                               uint8_t dayOfWeek, int32_t milliseconds,
00394                               int32_t monthLength, int32_t prevMonthLength,
00395                               UErrorCode& status) const;
00396 
00404     virtual int32_t getRawOffset(void) const;
00405 
00413     virtual void setRawOffset(int32_t offsetMillis);
00414 
00422     void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status);
00423 
00424 #ifdef ICU_SIMPLETIMEZONE_USE_DEPRECATES
00425 
00428     void setDSTSavings(int32_t millisSavedDuringDST);
00429 #endif
00430 
00437     int32_t getDSTSavings(void) const;
00438 
00445     virtual UBool useDaylightTime(void) const;
00446 
00456     virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
00457 
00464     UBool hasSameRules(const TimeZone& other) const;
00465 
00473     virtual TimeZone* clone(void) const;
00474 
00475 public:
00476 
00487     virtual UClassID getDynamicClassID(void) const { return (UClassID)&fgClassID; }
00488 
00500     static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00501 
00502 private:
00506     enum EMode
00507     {
00508         DOM_MODE = 1,
00509         DOW_IN_MONTH_MODE,
00510         DOW_GE_DOM_MODE,
00511         DOW_LE_DOM_MODE
00512     };
00513 
00514     friend class TimeZone; // for access to these 2 constructors:
00515 
00519     SimpleTimeZone(const StandardZone& stdZone, const UnicodeString& id);
00520     SimpleTimeZone(const DSTZone& dstZone, const UnicodeString& id);
00521 
00525     void construct(int32_t rawOffsetGMT,
00526                    int8_t startMonth, int8_t startDay, int8_t startDayOfWeek,
00527                    int32_t startTime, TimeMode startTimeMode,
00528                    int8_t endMonth, int8_t endDay, int8_t endDayOfWeek,
00529                    int32_t endTime, TimeMode endTimeMode,
00530                    int32_t dstSavings, UErrorCode& status);
00531 
00541     static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen,
00542                                  int8_t dayOfMonth,
00543                                  int8_t dayOfWeek, int32_t millis, int32_t millisDelta,
00544                                  EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek,
00545                                  int8_t ruleDay, int32_t ruleMillis);
00546 
00562     void decodeRules(UErrorCode& status);
00563     void decodeStartRule(UErrorCode& status);
00564     void decodeEndRule(UErrorCode& status);
00565 
00566     static const char     fgClassID;
00567 
00568     int8_t startMonth, startDay, startDayOfWeek;   // the month, day, DOW, and time DST starts
00569     int32_t startTime;
00570     TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode
00571     int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends
00572     int32_t endTime;
00573     int32_t startYear;  // the year these DST rules took effect
00574     int32_t rawOffset;  // the TimeZone's raw GMT offset
00575     UBool useDaylight; // flag indicating whether this TimeZone uses DST
00576     static const int8_t staticMonthLength[12]; // lengths of the months
00577     EMode startMode, endMode;   // flags indicating what kind of rules the DST rules are
00578 
00583     int32_t dstSavings;
00584 };
00585 
00586 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth,
00587                                          int32_t dayOfWeek,
00588                                          int32_t time, UErrorCode& status) {
00589     setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
00590 }
00591 
00592 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
00593                                          int32_t time,
00594                                          UErrorCode& status) {
00595     setStartRule(month, dayOfMonth, time, WALL_TIME, status);
00596 }
00597 
00598 inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
00599                                          int32_t dayOfWeek,
00600                                          int32_t time, UBool after, UErrorCode& status) {
00601     setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
00602 }
00603 
00604 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth,
00605                                        int32_t dayOfWeek,
00606                                        int32_t time, UErrorCode& status) {
00607     setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status);
00608 }
00609 
00610 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
00611                                        int32_t time, UErrorCode& status) {
00612     setEndRule(month, dayOfMonth, time, WALL_TIME, status);
00613 }
00614 
00615 inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
00616                                        int32_t time, UBool after, UErrorCode& status) {
00617     setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status);
00618 }
00619 
00620 U_NAMESPACE_END
00621 
00622 #endif // _SIMPLETZ

Generated on Sun May 22 18:49:51 2005 for ICU 2.1 by  doxygen 1.4.2