[#BloombergLP-bdlt-Date] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bdlt.adoc[bdlt]::Date :relfileprefix: ../../ :mrdocs: This class implements a complex‐constrained, value‐semantic type for representing dates according to the Unix (POSIX) calendar. Each object of this class _always_ represents a _valid_ date value in the range `[0001JAN01 .. 9999DEC31]` inclusive. The interface of this class supports `Date` values expressed in terms of either year/month/day (the canonical representation) or year/day‐of‐year (an alternate representation). See []Date Values and Their Representations) for details. == Synopsis Declared in `<bdlt_date.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class Date; ---- == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlt/Date/2constructor-0e.adoc[`Date`] [.small]#[constructor]# | Constructors | xref:BloombergLP/bdlt/Date/2destructor.adoc[`~Date`] [.small]#[destructor]# | Destroy this object. | xref:BloombergLP/bdlt/Date/operator_assign.adoc[`operator=`] | Assign to this object the value of the specified `rhs` date, and return a reference providing modifiable access to this object. | xref:BloombergLP/bdlt/Date/addDaysIfValid.adoc[`addDaysIfValid`] | Set this object to have the value that is later by the specified (signed) `numDays` from its current value, if the resulting value falls within the range of dates supported by this class (see `isValidYearMonthDay`). Return 0 on success, and a non‐zero value (with no effect) otherwise. Note that `numDays` may be negative. | xref:BloombergLP/bdlt/Date/bdexStreamIn.adoc[`bdexStreamIn`] | Assign to this object the value read from the specified input `stream` using the specified `version` format, and return a reference to `stream`. If `stream` is initially invalid, this operation has no effect. If `version` is not supported, this object is unaltered and `stream` is invalidated, but otherwise unmodified. If `version` is supported but `stream` becomes invalid during this operation, this object has an undefined, but valid, state. Note that no version is read from `stream`. See the `bslx` package‐level documentation for more information on BDEX streaming of value‐semantic types and containers. | xref:BloombergLP/bdlt/Date/bdexStreamOut.adoc[`bdexStreamOut`] | Write the value of this object, using the specified `version` format, to the specified output `stream`, and return a reference to `stream`. If `stream` is initially invalid, this operation has no effect. If `version` is not supported, `stream` is invalidated, but otherwise unmodified. Note that `version` is not written to `stream`. See the `bslx` package‐level documentation for more information on BDEX streaming of value‐semantic types and containers. | xref:BloombergLP/bdlt/Date/day.adoc[`day`] | Return the day of the month in the range `[1 .. 31]` of this date. | xref:BloombergLP/bdlt/Date/dayOfWeek.adoc[`dayOfWeek`] | Return the day of the week in the range `[DayOfWeek::e_SUN .. DayOfWeek::e_SAT]` of this date. | xref:BloombergLP/bdlt/Date/dayOfYear.adoc[`dayOfYear`] | Return the day of the year in the range `[1 .. 366]` of this date. | xref:BloombergLP/bdlt/Date/getYearDay.adoc[`getYearDay`] | Load, into the specified `year` and `dayOfYear`, the respective `year` and `dayOfYear` attribute values of this date. | xref:BloombergLP/bdlt/Date/getYearMonthDay.adoc[`getYearMonthDay`] | Load, into the specified `year`, `month`, and `day`, the respective `year`, `month`, and `day` attribute values of this date. | xref:BloombergLP/bdlt/Date/month.adoc[`month`] | Return the month of the year in the range `[1 .. 12]` of this date. | xref:BloombergLP/bdlt/Date/monthOfYear.adoc[`monthOfYear`] | Return the month of the year in the range `[MonthOfYear::e_JAN .. MonthOfYear::e_DEC]` of this date. | xref:BloombergLP/bdlt/Date/operator_inc.adoc[`operator++`] | Set this object to have the value that is one day later than its current value, and return a reference providing modifiable access to this object. The behavior is undefined if the year/month/day representation of the current value is `9999/12/31`. | xref:BloombergLP/bdlt/Date/operator_plus_eq.adoc[`operator+=`] | Assign to this object the value that is later by the specified (signed) `numDays` from its current value, and return a reference providing modifiable access to this object. The behavior is undefined unless the resulting value falls within the range of dates supported by this class (see `isValidYearMonthDay`). Note that `numDays` may be negative. | xref:BloombergLP/bdlt/Date/operator_dec.adoc[`operator‐‐`] | Set this object to have the value that is one day earlier than its current value, and return a reference providing modifiable access to this object. The behavior is undefined if the year/month/day representation of the current value is `0001/01/01`. | xref:BloombergLP/bdlt/Date/operator_minus_eq.adoc[`operator‐=`] | Assign to this object the value that is earlier by the specified (signed) `numDays` from its current value, and return a reference providing modifiable access to this object. The behavior is undefined unless the resulting value falls within the range of dates supported by this class (see `isValidYearMonthDay`). Note that `numDays` may be negative. | xref:BloombergLP/bdlt/Date/print.adoc[`print`] | Write the value of this object to the specified output `stream` in a human‐readable format, and return a reference to `stream`. Optionally specify an initial indentation `level`, whose absolute value is incremented recursively for nested objects. If `level` is specified, optionally specify `spacesPerLevel`, whose absolute value indicates the number of spaces per indentation level for this and all of its nested objects. If `level` is negative, suppress indentation of the first line. If `spacesPerLevel` is negative, format the entire output on one line, suppressing all but the initial indentation (as governed by `level`). If `stream` is not valid on entry, this operation has no effect. Note that this human‐readable format is not fully specified, and can change without notice. | xref:BloombergLP/bdlt/Date/setYearDay.adoc[`setYearDay`] | Set this object to have the value represented by the specified `year` and `dayOfYear`. The behavior is undefined unless `year` and `dayOfYear` represent a valid `Date` value (see `isValidYearDay`). | xref:BloombergLP/bdlt/Date/setYearDayIfValid.adoc[`setYearDayIfValid`] | Set this object to have the value represented by the specified `year` and `dayOfYear` if they comprise a valid `Date` value (see `isValidYearDay`). Return 0 on success, and a non‐zero value (with no effect) otherwise. | xref:BloombergLP/bdlt/Date/setYearMonthDay.adoc[`setYearMonthDay`] | Set this object to have the value represented by the specified `year`, `month`, and `day`. The behavior is undefined unless `year`, `month`, and `day` represent a valid `Date` value (see `isValidYearMonthDay`). | xref:BloombergLP/bdlt/Date/setYearMonthDayIfValid.adoc[`setYearMonthDayIfValid`] | Set this object to have the value represented by the specified `year`, `month`, and `day` if they comprise a valid `Date` value (see `isValidYearMonthDay`). Return 0 on success, and a non‐zero value (with no effect) otherwise. | xref:BloombergLP/bdlt/Date/streamOut.adoc[`streamOut`] | Write the value of this object to the specified output `stream` in a single‐line format, and return a reference to `stream`. If `stream` is not valid on entry, this operation has no effect. Note that this human‐readable format is not fully specified, can change without notice, and is logically equivalent to: ` print(stream, 0, ‐1); ` | xref:BloombergLP/bdlt/Date/validateAndSetYearDay.adoc[`validateAndSetYearDay`] | Set this object to have the value represented by the specified `year` and `dayOfYear` if they comprise a valid `Date` value (see `isValidYearDay`). Return 0 on success, and a non‐zero value (with no effect) otherwise. | xref:BloombergLP/bdlt/Date/validateAndSetYearMonthDay.adoc[`validateAndSetYearMonthDay`] | Set this object to have the value represented by the specified `year`, `month`, and `day` if they comprise a valid `Date` value (see `isValidYearMonthDay`). Return 0 on success, and a non‐zero value (with no effect) otherwise. | xref:BloombergLP/bdlt/Date/year.adoc[`year`] | Return the year in the range `[1 .. 9999]` of this date. |=== == Static Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlt/Date/isValid-09.adoc[`isValid`] | `isValid` overloads | xref:BloombergLP/bdlt/Date/isValidYearDay.adoc[`isValidYearDay`] | Return `true` if the specified `year` and `dayOfYear` represent a valid value for a `Date` object, and `false` otherwise. `year` and `dayOfYear` represent a valid `Date` value if they correspond to a valid date as defined by the Unix (POSIX) calendar confined to the year range `[1 .. 9999]` inclusive. See {Valid Date Values and Their Representations} for details. | xref:BloombergLP/bdlt/Date/isValidYearMonthDay.adoc[`isValidYearMonthDay`] | Return `true` if the specified `year`, `month`, and `day` represent a valid value for a `Date` object, and `false` otherwise. `year`, `month`, and `day` represent a valid `Date` value if they correspond to a valid date as defined by the Unix (POSIX) calendar confined to the year range `[1 .. 9999]` inclusive. See {Valid Date Values and Their Representations} for details. | xref:BloombergLP/bdlt/Date/maxSupportedBdexVersion-06.adoc[`maxSupportedBdexVersion`] | `maxSupportedBdexVersion` overloads | xref:BloombergLP/bdlt/Date/maxSupportedVersion.adoc[`maxSupportedVersion`] | Return the most current BDEX streaming version number supported by this class. |=== == Friends [cols="1,4"] |=== | Name| Description | `xref:BloombergLP/bdlt/hashAppend-09.adoc[BloombergLP::bdlt::hashAppend]` | Pass the specified `object` to the specified `hashAlg`. This function integrates with the `bslh` modular hashing system and effectively provides a `bsl::hash` specialization for `Date`. | `xref:BloombergLP/bdlt/operator_minus-00f.adoc[BloombergLP::bdlt::operator‐]` | Return the (signed) number of days between the specified `lhs` and `rhs` dates. Note that if `lhs < rhs` the result will be negative. | `xref:BloombergLP/bdlt/operator_minus-09c.adoc[BloombergLP::bdlt::operator‐]` | Return the date value that is earlier by the specified (signed) `numDays` from the specified `date`. The behavior is undefined unless the resulting value falls within the range of dates supported by this class (see `isValidYearMonthDay`). Note that `numDays` may be negative. | `xref:BloombergLP/bdlt/operator_plus-06b.adoc[BloombergLP::bdlt::operator+]` | Add the specified `numDays` to the specified `date` (same as `date + numDays`). | `xref:BloombergLP/bdlt/operator_plus-04.adoc[BloombergLP::bdlt::operator+]` | Return the date value that is later by the specified (signed) `numDays` from the specified `date`. The behavior is undefined unless the resulting value falls within the range of dates supported by this class (see `isValidYearMonthDay`). Note that `numDays` may be negative. | `xref:BloombergLP/bdlt/operator_gt-0c.adoc[BloombergLP::bdlt::operator>]` | Return `true` if the specified `lhs` date is later than the specified `rhs` date, and `false` otherwise. | `xref:BloombergLP/bdlt/operator_ge-079.adoc[BloombergLP::bdlt::operator>=]` | Return `true` if the specified `lhs` date is later than or the same as the specified `rhs` date, and `false` otherwise. | `xref:BloombergLP/bdlt/operator_le-04.adoc[BloombergLP::bdlt::operator<=]` | Return `true` if the specified `lhs` date is earlier than or the same as the specified `rhs` date, and `false` otherwise. | `xref:BloombergLP/bdlt/operator_lt-01.adoc[BloombergLP::bdlt::operator<]` | Return `true` if the specified `lhs` date is earlier than the specified `rhs` date, and `false` otherwise. | `xref:BloombergLP/bdlt/operator_not_eq-0cd.adoc[BloombergLP::bdlt::operator!=]` | Return `true` if the specified `lhs` and `rhs` objects do not have the same value, and `false` otherwise. Two `Date` objects do not have the same value if any of their `year`, `month`, and `day` attributes (respectively) do not have the same value. | `xref:BloombergLP/bdlt/operator_eq-057.adoc[BloombergLP::bdlt::operator==]` | Return `true` if the specified `lhs` and `rhs` objects have the same value, and `false` otherwise. Two `Date` objects have the same value if each of their `year`, `month`, and `day` attributes (respectively) have the same value. |=== == Non-Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlt/operator_inc-0f.adoc[`operator++`] | Set the specified `date` object to have the value that is one day later than its current value, and return the value of `date` on entry. The behavior is undefined if the value of `date` on entry is `9999/12/31`. | xref:BloombergLP/bdlt/operator_dec-01.adoc[`operator‐‐`] | Set the specified `date` object to have the value that is one day earlier than its current value, and return the value of `date` on entry. The behavior is undefined if the value of `date` on entry is `0001/01/01`. |=== == Derived Classes [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlt/PackedCalendar_DateRef.adoc[`PackedCalendar_DateRef`] | This private class is used by the arrow operator of the holiday iterator and business day iterator classes. The objects instantiated from this class serve as references to `Date` objects. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#