Module: Essential Tools Module Group: Date and Time Classes
Does not inherit
operator!=() operator>>() operator>() |
operator>=() operator<<() operator<() |
operator<=() operator+() operator-() |
operator==() |
#include <rw/rwdate.h> RWDate a; // Construct today's date
NOTE -- RWDate is deprecated and is no longer supported. Be aware that it may be removed in a future release. Please use RWDateTime instead. RWDateTime combines the functionality of RWDate and RWTime, but with a much greater range and millisecond accuracy.
Class RWDate represents a date, stored as a Julian day number. The member function isValid() can be used to determine whether an RWDate is a valid date. For example, isValid() would return false for the date 29 February 1991 because 1991 is not a leap year. See the chapter on date and time classes in the Essential Tools Module User's Guide.
NOTE -- If you are converting an RWDate to an RWTime, be aware that the RWTime object cannot represent dates before 1 Jan 1901, and can represent dates only up to the year 2037.
RWDates can be converted to and from RWTimes, and to and from the Standard C Library type struct tm defined in <time.h>.
We recommend creating programs that use 4-digit year specifiers.
Note that because the default constructor for this class creates an instance holding the current date, constructing a large array of RWDate may be slow.
RWDate v[5000]; // Figures out the current date 5000 times
Those with access to the C++ Standard Library-based versions of the Essential Tools Module template collections should consider the following:
// Figures out the current date just once: RWTValOrderedVector<RWDate> v(5000, RWDate());
Thanks to the smart allocation scheme of the standard collections, the above declaration results in only one call to the default constructor followed by 5000 invocations of the copy constructor. In the case of RWDate, the copy constructor amounts to an assignment of one long to another, resulting in faster creation than the simple array.
Simple
#include <rw/rwdate.h> int main () { // ENIAC start date RWDate d (14, "February", 1945); // Today RWDate today; std::cout << d.asString("%A, %B %d 19%y") << " was the day the ENIAC computer was\nfirst turned on. " << today - d << " days have gone by since then. " << std::endl; return 0; }
Program output (where the number of days since ENIAC was turned on obviously depends on the date the program is run):
Wednesday, February 14 1945 was the day the ENIAC computer was first turned on. 23491 days have gone by since then.
RWDate();
Default constructor. Constructs an RWDate with the present date.
RWDate(const RWDate&);
Copy constructor.
RWDate(unsigned day, unsigned year);
Constructs an RWDate with a given day of the year and a given year. The member function isValid() can be used to test whether the results are a valid date.
RWDate(unsigned day, unsigned month, unsigned year);
Constructs an RWDate with the given day of the month, month of the year, and year. Days should be 1-31, months should be 1-12, and the year may be specified as (for example) 1990, or 90. The member function isValid() can be used to test whether the results are a valid date.
RWDate(unsigned day, const char* mon, unsigned year, const RWLocale& locale = RWLocale::global());
Constructs an RWDate with the given day of the month, month and year. The locale argument is used to convert the month name. Days should be 1-31, months may be specified as (for example): January, JAN, or Jan, and the year may be specified as (for example) 1990, or 90. The member function isValid() can be used to test whether the results are a valid date.
RWDate(istream& s,const RWLocale& locale = RWLocale::global());
The locale argument reads and converts a full line to a date. The member function isValid() must be used to test whether the results are a valid date. Because RWLocale cannot rigorously check date input, dates created in this way should also be reconfirmed by the user.
RWDate(const RWCString& str, const RWLocale& locale = RWLocale::global());
Converts the string str to a date. The member function isValid() must be used to test whether the results are a valid date. Because RWLocale cannot rigorously check date input, dates created in this way should also be reconfirmed by the user.
RWDate(const RWTime& t, const RWZone& zone = RWZone::local());
Constructs an RWDate from an RWTime. The time zone used defaults to local. The member function isValid() must be used to test whether the results are a valid date.
RWDate(const struct tm*);
Constructs an RWDate from the contents of the struct tm argument members tm_year, tm_mon, and tm_mday. Note that the numbering of months and years used in struct tm differs from that used for RWDate and RWTime operations. struct tm is declared in the standard include file <time.h>.
RWDate(unsigned long jd);
Constructs a date from the Julian Day number jd. Note that it is possible to construct a valid RWDate which represents a day previous to the beginning of the Gregorian calendar for some locality. Rogue Wave doesn't know the specifics for your locality, so will not enforce an arbitrary cutoff for "validity."
RWDate& operator=(const RWDate&);
Assignment operator.
RWDate operator++();
Prefix increment operator. Adds one day to self, then return the result.
RWDate operator--();
Prefix decrement operator. Subtracts one day from self, then returns the result.
RWDate operator++(int);
Postfix increment operator. Adds one day to self, returning the initial value.
RWDate operator--(int);
Postfix decrement operator. Subtracts one day from self, returning the initial value.
RWDate& operator+=(unsigned long s);
Adds s days to self, returning self.
RWDate& operator-=(unsigned long s);
Subtracts s days from self, returning self.
RWCString asString(char format = 'x', const RWLocale& = RWLocale::global()) const;
Returns the date as a string, formatted by the optional RWLocale argument. Formats are as defined in the C99 Standard C Library function strftime(), explained in the description for RWLocale.
RWCString asString(const char* format, const RWLocale& = RWLocale::global()) const;
Returns the date as a string, formatted by the optional RWLocale argument. Formats are as defined in the C99 Standard C Library function strftime(), explained in the description for RWLocale.
bool between(const RWDate& a, const RWDate& b) const;
Returns true if this RWDate is between a and b, inclusive.
size_t binaryStoreSize() const;
Returns the number of bytes necessary to store the object using the global function
RWFile& operator<<(RWFile&, const RWDate&);
int compareTo(const RWDate* d) const;
Compares self to the RWDate pointed to by d and returns:
0 if self == *d;
1 if self > *d;
-1 if self < *d.
unsigned day() const;
Returns the day of the year (1-366) for this date.
unsigned dayOfMonth() const;
Returns the day of the month (1-31) for this date.
void extract(struct tm*) const;
Returns with the struct tm argument filled out completely, with the time members set to 0 and tm_isdst set to -1. Note that the encoding for months and days of the week used in struct tm differs from that used elsewhere in RWDate. If the date is invalid, all fields are set to -1.
unsigned firstDayOfMonth() const;
Returns the day of the year (1-366) corresponding to the first day of this RWDate's month and year.
unsigned firstDayOfMonth(unsigned month) const;
Returns the day of the year (1-366) corresponding to the first day of the month month (1-12) in this RWDate's year.
unsigned hash() const;
Returns a suitable hashing value.
bool isValid() const;
Returns true if this is a valid date, false otherwise.
NOTE -- The next two functions let you manipulate the date via Julian days. Note that the Julian day number is not the same as a date according to the Julian calendar. The Julian day number is calculated using Algorithm 199 from Communications of the ACM, Volume 6, No. 8, (Aug. 1963), p. 444 and is valid for any valid Gregorian date in the Gregorian calendar. The Essential Tools Module User's Guide provides more information.
unsigned long julian() const;
Returns the value of the Julian day number.
void julian(unsigned long j);
Changes the value of the Julian day number to j.
bool leap() const;
Returns true if the year of this RWDate is a leap year.
RWDate max(const RWDate& t) const;
Returns the later date of self or t.
RWDate min(const RWDate& t) const;
Returns the earlier date of self or t.
unsigned month() const;
Returns the month (1-12) for this date.
RWCString monthName(const RWLocale& = RWLocale::global()) const;
Returns the name of the month for this date, according to the optional RWLocale argument.
RWDate next(unsigned dayNum) const;
Returns the date of the next numbered day of the week, where Monday = 1, ..., Sunday = 7. The variable dayNum must be between 1 and 7, inclusive.
RWDate next(const char* dayName, const RWLocale& = RWLocale::global()) const;
Returns the date of the next dayName (for example, the date of the previous Monday) The weekday name is interpreted according to the optional RWLocale argument.
RWDate previous(unsigned dayNum) const;
Returns the date of the previous numbered day of the week, where Monday = 1, ..., Sunday = 7. The variable dayNum must be between 1 and 7, inclusive.
RWDate previous(const char* dayName, const RWLocale& = RWLocale::global()) const;
Returns the date of the previous dayName (for example, the date of the previous Monday) The weekday name is interpreted according to the optional RWLocale argument.
RWCString weekDayName(const RWLocale& = RWLocale::global()) const;
Returns the name of the day of the week for this date, according to the optional RWLocale argument. The function defaults to using the RWLocale global locale.
unsigned weekDay() const;
Returns the number of the day of the week for this date, where Monday = 1, ..., Sunday = 7.
unsigned year() const;
Returns the year of this date.
static unsigned dayOfWeek(const char* dayName, const RWLocale& = RWLocale::global());
Returns the number of the day of the week corresponding to the given dayName. "Monday" = 1, ..., "Sunday" = 7. Names are interpreted by the optional RWLocale argument. Returns 0 if no match is found.
static unsigned daysInMonthYear(unsigned month, unsigned year);
Returns the number of days in a given month and year. Returns 0 if month is not between 1 and 12 inclusive.
static unsigned daysInYear(unsigned year);
Returns the number of days in a given year.
static bool dayWithinMonth(unsigned monthNum, unsigned dayNum, unsigned year);
Returns true if a day (1-31) is within a given month in a given year.
static unsigned hash(const RWDate& d);
Returns the hash value of d as returned by d.hash().
static unsigned indexOfMonth(const char* monthName, const RWLocale& = RWLocale::global());
Returns the number of the month (1-12) corresponding to the given monthName. Returns 0 for no match.
static unsigned long jday(unsigned mon, unsigned day, unsigned year);
Returns the Julian day corresponding to the given month (1-12), day (1-31) and year. Returns zero (0) if the date is invalid.
static RWCString nameOfMonth(unsigned monNum, const RWLocale& = RWLocale::global());
Returns the name of month monNum (January = 1, ..., December = 12), formatted for the given locale.
static bool leapYear(unsigned year);
Returns true if a given year is a leap year.
static RWDate now();
Returns today's date.
static RWCString weekDayName(unsigned const RWLocale& = RWLocale::global());
Returns the name of the day of the week dayNum (Monday = 1, ..., Sunday = 7), formatted for the given locale. The function defaults to the RWLocale global locale.
bool operator<(const RWDate& d1, const RWDate& d2);
Returns true if the date d1 is before d2.
bool operator<=(const RWDate& d1, const RWDate& d2);
Returns true if the date d1 is before or the same as d2.
bool operator>(const RWDate& d1, const RWDate& d2);
Returns true if the date d1 is after d2.
bool operator>=(const RWDate& d1, const RWDate& d2);
Returns true if the date d1 is after or the same as d2.
bool operator==(const RWDate& d1, const RWDate& d2);
Returns true if the date d1 is the same as t2.
bool operator!=(const RWDate& d1, const RWDate& d2);
Returns true if the date d1 is not the same as d2.
RWDate operator+(const RWDate& d, unsigned long s); RWDate operator+(unsigned long s, const RWDate& d);
Returns the date s days in the future from the date d.
unsigned long operator-(const RWDate& d1, const RWDate& d2);
If d1 > d2, returns the number of days between d1 and d2. Otherwise, the result is implementation defined.
RWDate operator-(const RWDate& d, unsigned long s);
Returns the date s days in the past from d.
ostream& operator<<(ostream& s, const RWDate& d);
Outputs the date d on ostream s, according to the locale imbued in the stream (see class RWLocale), or by RWLocale::global() if none.
istream& operator>>(istream& s, RWDate& t);
Reads t from istream s. One full line is read, and the string contained is converted according to the locale imbued in the stream (see class RWLocale), or by RWLocale::global() if none. The function RWDate::isValid() must be used to test whether the results are a valid date.
RWvostream& operator<<(RWvostream&, const RWDate& date); RWFile& operator<<(RWFile&, const RWDate& date);
Saves the date date to a virtual stream or RWFile, respectively.
RWvistream& operator>>(RWvistream&, RWDate& date); RWFile& operator>>(RWFile&, RWDate& date);
Restores the date into date from a virtual stream or RWFile, respectively, replacing the previous contents of date.
© Copyright Rogue Wave Software, Inc. All Rights Reserved.
Rogue Wave and SourcePro are registered trademarks of Rogue Wave Software, Inc. in the United States and other countries. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.