Поделиться через


Класс year_month_day

Представляет месяц, год и день.

Синтаксис

class year_month_day; // C++20

Участники

Имя Описание
Конструкторы Создание year_month_day
day Возвращает день.
month Возвращает месяц.
ok Убедитесь, что year значения и month значения находятся в допустимом диапазоне.
operator+= Добавьте указанное количество месяцев или лет.
operator-= Вычитает указанное количество месяцев или лет.
operator local_days Получите количество дней от system_clock эпохи до этогоyear_month_day.local_days
operator sys_days Получите количество дней от system_clock эпохи до этогоyear_month_day.sys_days
year Возвращает год.

Не являющиеся членами

Имя Описание
from_stream year_month_day Анализ из потока с помощью указанного формата
operator+ Добавьте месяцы или годы.
operator- Вычитайте месяцы или годы.
operator== Определите, равны ли два year_month_day значения.
operator<=> Сравните два year_month_day значения. Операторы >, >=, <=, <, != синтезируются компилятором.
operator<< Выводится year_month_day в поток.

Требования

Заголовок: <chrono> (с C++20)

Пространство имен: std::chrono

Параметр компилятора: /std:c++latest

Конструкторы

Создайте year_month_day

1) year_month_day() = default;
2) constexpr year_month_day(const year& y, const month& m, day& d) noexcept;
3) constexpr year_month_day(const year_month_day_last& ymdl) noexcept;
4) constexpr year_month_day(const sys_days& dp) noexcept;
5) constexpr explicit year_month_day(const local_days& dp) noexcept;

Параметры

dday Значение.

dpЗначение или local_days значениеsys_days.

mmonth Значение.

y
Значение year.

ymdlyear_month_day_last Значение.

Замечания

1) Конструктор по умолчанию не инициализирует месяц или день.
2) Создает объект с указанным годом year_month_day , месяцем и днем.
3) Создает объект с указанным годом year_month_day , месяцем и днем ymdl
4) Создает объект year_month_day с той же датой, что dpи .
5) Создает с year_month_day той же датой, что dp и будто построено year_month_day(sys_days(dp.time_since_epoch())).

Сведения о синтаксисе C++20, используемом для указания дат, см. в разделе operator/

Пример. Создание year_month_day

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    year_month_day ymd{ April / 4 / 1975 };
    std::cout << ymd;
    return 0;
}
1975-04-04

day

Получите день.

constexpr day day() const noexcept;

Возвращаемое значение

Значение типа day.

month

Получите месяц.

constexpr month month() const noexcept;

Возвращаемое значение

Значение типа month.

operator local_days

Получение количества дней от system_clock эпохи (1/1/1970) к этому year_month_day как local_days

constexpr explicit operator local_days() const noexcept;

Возвращаемое значение

Если ok(), возвращает количество дней в виде local_days{sys_days{*this}.time_since_epoch()}

operator sys_days

Получите количество дней от system_clock эпохи (1/1/1970) к этому year_month_day как sys_days.

constexpr operator sys_days() const noexcept;

Возвращаемое значение

Если ok(), возвращает sys_days количество дней от sys_days эпохи (1/1/1970) до даты, проведенной в этой дате year_month_day. Значение будет отрицательным, если дата в этой year_month_day дате до sys_days эпохи.

Если год и месяц в этом year_month_day случае ok(), возвращается sys_days{year/month/1d} + (day-1d). В противном случае возвращаемое значение не указано.

В sys_days диапазоне [days{-12687428}, days{11248737}] можно преобразовать в year_month_day и обратно и иметь одно и то же значение.

year

Получите год.

constexpr year year() const noexcept;

Возвращаемое значение

year.

ok

Проверьте, есть ли значение года и месяца, хранящиеся в этом year_month_day диапазоне. Гарантирует, что день находится в диапазоне [1d, (y/m/last).day()], учитывая високосные годы и разное количество дней в каждом месяце.

constexpr bool ok() const noexcept;

Возвращаемое значение

trueyear_month_day Если значения года, месяца и дня находятся в допустимом диапазоне. В противном случае — false.

operator+=

Добавьте к этому year_month_dayмесяцы или годы.

1) constexpr year_month_day& operator+=(const months& dm) noexcept;
2) constexpr year_month_day& operator+=(const years& dy) noexcept;

Параметры

dm
Количество добавленных месяцев.

dy
Количество добавляемых лет.

Возвращаемое значение

*this, который отражает результат добавления.

Пример: operator+=

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    year_month_day ymd{June / 1d / 2021y};

    std::cout << ymd << '\n';

    ymd += months{2};
    ymd += years{1};

    std::cout << ymd;
    
    return 0;
}
2021-06-01
2022-08-01

operator-=

Вычитайте месяцы или годы из этого year_month_day.

1) constexpr year_month_day& operator-=(const months& dm) noexcept;
2) constexpr year_month_day& operator-=(const years& dy) noexcept;

Параметры

dm
Количество месяцев для вычитания.

dy
Количество лет для вычитания.

Возвращаемое значение

*this, который отражает результат вычитания.

Пример: operator-=

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    year_month_day ymd{June / 1d / 2021y};

    std::cout << ymd << '\n';

    ymd -= months{2};
    ymd -= years{1};

    std::cout << ymd;
    
    return 0;
}
2021-06-01
2020-04-01

См. также

<chrono>
year
year_month
year_month_day_last
year_month_weekday
year_month_weekday_last
operator/
Справочник по файлам заголовков