Spaces:
Sleeping
Sleeping
// © 2016 and later: Unicode, Inc. and others. | |
// License & terms of use: http://www.unicode.org/copyright.html | |
/* | |
******************************************************************************* | |
* Copyright (C) 2007-2008, International Business Machines Corporation and * | |
* others. All Rights Reserved. * | |
******************************************************************************* | |
*/ | |
/** | |
* \file | |
* \brief C++ API: Rule for specifying date and time in an year | |
*/ | |
U_NAMESPACE_BEGIN | |
/** | |
* <code>DateTimeRule</code> is a class representing a time in a year by | |
* a rule specified by month, day of month, day of week and | |
* time in the day. | |
* | |
* @stable ICU 3.8 | |
*/ | |
class U_I18N_API DateTimeRule : public UObject { | |
public: | |
/** | |
* Date rule type constants. | |
* @stable ICU 3.8 | |
*/ | |
enum DateRuleType { | |
DOM = 0, /**< The exact day of month, | |
for example, March 11. */ | |
DOW, /**< The Nth occurrence of the day of week, | |
for example, 2nd Sunday in March. */ | |
DOW_GEQ_DOM, /**< The first occurrence of the day of week on or after the day of monnth, | |
for example, first Sunday on or after March 8. */ | |
DOW_LEQ_DOM /**< The last occurrence of the day of week on or before the day of month, | |
for example, first Sunday on or before March 14. */ | |
}; | |
/** | |
* Time rule type constants. | |
* @stable ICU 3.8 | |
*/ | |
enum TimeRuleType { | |
WALL_TIME = 0, /**< The local wall clock time */ | |
STANDARD_TIME, /**< The local standard time */ | |
UTC_TIME /**< The UTC time */ | |
}; | |
/** | |
* Constructs a <code>DateTimeRule</code> by the day of month and | |
* the time rule. The date rule type for an instance created by | |
* this constructor is <code>DOM</code>. | |
* | |
* @param month The rule month, for example, <code>Calendar::JANUARY</code> | |
* @param dayOfMonth The day of month, 1-based. | |
* @param millisInDay The milliseconds in the rule date. | |
* @param timeType The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code> | |
* or <code>UTC_TIME</code>. | |
* @stable ICU 3.8 | |
*/ | |
DateTimeRule(int32_t month, int32_t dayOfMonth, | |
int32_t millisInDay, TimeRuleType timeType); | |
/** | |
* Constructs a <code>DateTimeRule</code> by the day of week and its ordinal | |
* number and the time rule. The date rule type for an instance created | |
* by this constructor is <code>DOW</code>. | |
* | |
* @param month The rule month, for example, <code>Calendar::JANUARY</code>. | |
* @param weekInMonth The ordinal number of the day of week. Negative number | |
* may be used for specifying a rule date counted from the | |
* end of the rule month. | |
* @param dayOfWeek The day of week, for example, <code>Calendar::SUNDAY</code>. | |
* @param millisInDay The milliseconds in the rule date. | |
* @param timeType The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code> | |
* or <code>UTC_TIME</code>. | |
* @stable ICU 3.8 | |
*/ | |
DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek, | |
int32_t millisInDay, TimeRuleType timeType); | |
/** | |
* Constructs a <code>DateTimeRule</code> by the first/last day of week | |
* on or after/before the day of month and the time rule. The date rule | |
* type for an instance created by this constructor is either | |
* <code>DOM_GEQ_DOM</code> or <code>DOM_LEQ_DOM</code>. | |
* | |
* @param month The rule month, for example, <code>Calendar::JANUARY</code> | |
* @param dayOfMonth The day of month, 1-based. | |
* @param dayOfWeek The day of week, for example, <code>Calendar::SUNDAY</code>. | |
* @param after true if the rule date is on or after the day of month. | |
* @param millisInDay The milliseconds in the rule date. | |
* @param timeType The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code> | |
* or <code>UTC_TIME</code>. | |
* @stable ICU 3.8 | |
*/ | |
DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after, | |
int32_t millisInDay, TimeRuleType timeType); | |
/** | |
* Copy constructor. | |
* @param source The DateTimeRule object to be copied. | |
* @stable ICU 3.8 | |
*/ | |
DateTimeRule(const DateTimeRule& source); | |
/** | |
* Destructor. | |
* @stable ICU 3.8 | |
*/ | |
~DateTimeRule(); | |
/** | |
* Clone this DateTimeRule object polymorphically. The caller owns the result and | |
* should delete it when done. | |
* @return A copy of the object. | |
* @stable ICU 3.8 | |
*/ | |
DateTimeRule* clone() const; | |
/** | |
* Assignment operator. | |
* @param right The object to be copied. | |
* @stable ICU 3.8 | |
*/ | |
DateTimeRule& operator=(const DateTimeRule& right); | |
/** | |
* Return true if the given DateTimeRule objects are semantically equal. Objects | |
* of different subclasses are considered unequal. | |
* @param that The object to be compared with. | |
* @return true if the given DateTimeRule objects are semantically equal. | |
* @stable ICU 3.8 | |
*/ | |
bool operator==(const DateTimeRule& that) const; | |
/** | |
* Return true if the given DateTimeRule objects are semantically unequal. Objects | |
* of different subclasses are considered unequal. | |
* @param that The object to be compared with. | |
* @return true if the given DateTimeRule objects are semantically unequal. | |
* @stable ICU 3.8 | |
*/ | |
bool operator!=(const DateTimeRule& that) const; | |
/** | |
* Gets the date rule type, such as <code>DOM</code> | |
* @return The date rule type. | |
* @stable ICU 3.8 | |
*/ | |
DateRuleType getDateRuleType(void) const; | |
/** | |
* Gets the time rule type | |
* @return The time rule type, either <code>WALL_TIME</code> or <code>STANDARD_TIME</code> | |
* or <code>UTC_TIME</code>. | |
* @stable ICU 3.8 | |
*/ | |
TimeRuleType getTimeRuleType(void) const; | |
/** | |
* Gets the rule month. | |
* @return The rule month. | |
* @stable ICU 3.8 | |
*/ | |
int32_t getRuleMonth(void) const; | |
/** | |
* Gets the rule day of month. When the date rule type | |
* is <code>DOW</code>, the value is always 0. | |
* @return The rule day of month | |
* @stable ICU 3.8 | |
*/ | |
int32_t getRuleDayOfMonth(void) const; | |
/** | |
* Gets the rule day of week. When the date rule type | |
* is <code>DOM</code>, the value is always 0. | |
* @return The rule day of week. | |
* @stable ICU 3.8 | |
*/ | |
int32_t getRuleDayOfWeek(void) const; | |
/** | |
* Gets the ordinal number of the occurrence of the day of week | |
* in the month. When the date rule type is not <code>DOW</code>, | |
* the value is always 0. | |
* @return The rule day of week ordinal number in the month. | |
* @stable ICU 3.8 | |
*/ | |
int32_t getRuleWeekInMonth(void) const; | |
/** | |
* Gets the rule time in the rule day. | |
* @return The time in the rule day in milliseconds. | |
* @stable ICU 3.8 | |
*/ | |
int32_t getRuleMillisInDay(void) const; | |
private: | |
int32_t fMonth; | |
int32_t fDayOfMonth; | |
int32_t fDayOfWeek; | |
int32_t fWeekInMonth; | |
int32_t fMillisInDay; | |
DateRuleType fDateRuleType; | |
TimeRuleType fTimeRuleType; | |
public: | |
/** | |
* Return the class ID for this class. This is useful only for comparing to | |
* a return value from getDynamicClassID(). For example: | |
* <pre> | |
* . Base* polymorphic_pointer = createPolymorphicObject(); | |
* . if (polymorphic_pointer->getDynamicClassID() == | |
* . erived::getStaticClassID()) ... | |
* </pre> | |
* @return The class ID for all objects of this class. | |
* @stable ICU 3.8 | |
*/ | |
static UClassID U_EXPORT2 getStaticClassID(void); | |
/** | |
* Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This | |
* method is to implement a simple version of RTTI, since not all C++ | |
* compilers support genuine RTTI. Polymorphic operator==() and clone() | |
* methods call this method. | |
* | |
* @return The class ID for this object. All objects of a | |
* given class have the same class ID. Objects of | |
* other classes have different class IDs. | |
* @stable ICU 3.8 | |
*/ | |
virtual UClassID getDynamicClassID(void) const override; | |
}; | |
U_NAMESPACE_END | |
//eof | |