Класс year_month_day
Класс year_month_day из заголовочного файла <chrono> представляет
собой календарную дату, состоящую из трех компонентов: года, месяца и дня
месяца. Этот класс является частью библиотеки календарных типов, добавленной
в стандарт C++20. В отличие от time_t и структуры tm, класс
year_month_day хранит дату в виде отдельных полей и предоставляет
удобный интерфейс для доступа к ним. Первый компонент - это год, второй -
месяц, третий - день месяца.
Синтаксис
std::chrono::year_month_day ymd{year, month, day};
std::chrono::year_month_day ymd{std::chrono::year{2024}, std::chrono::month{3}, std::chrono::day{15}};
Пример
Давайте создадим объект year_month_day для даты
15 марта 2024 года и выведем его компоненты:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
year_month_day ymd{year{2024}, month{3}, day{15}};
cout << "Year: " << int(ymd.year()) << endl;
cout << "Month: " << unsigned(ymd.month()) << endl;
cout << "Day: " << unsigned(ymd.day()) << endl;
return 0;
}
Результат выполнения кода:
"Year: 2024"
"Month: 3"
"Day: 15"
Пример
Давайте проверим, является ли дата корректной, используя метод ok:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
year_month_day valid_date{year{2024}, month{3}, day{15}};
year_month_day invalid_date{year{2024}, month{13}, day{32}};
cout << "Valid date ok: " << boolalpha << valid_date.ok() << endl;
cout << "Invalid date ok: " << boolalpha << invalid_date.ok() << endl;
return 0;
}
Результат выполнения кода:
"Valid date ok: true"
"Invalid date ok: false"
Пример
Давайте получим текущую дату, используя системные часы, и выведем её:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
auto now = system_clock::now();
year_month_day today{floor<days>(now)};
cout << "Today: " << int(today.year()) << "-"
<< unsigned(today.month()) << "-"
<< unsigned(today.day()) << endl;
return 0;
}
Результат выполнения кода:
"Today: 2024-3-15"
Пример
Давайте выполним арифметические операции с датой, добавив к ней несколько дней и месяцев:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
year_month_day date{year{2024}, month{3}, day{15}};
auto new_date = date + days{10};
auto new_date2 = date + months{1};
cout << "Original: " << int(date.year()) << "-"
<< unsigned(date.month()) << "-"
<< unsigned(date.day()) << endl;
cout << "After 10 days: " << int(new_date.year()) << "-"
<< unsigned(new_date.month()) << "-"
<< unsigned(new_date.day()) << endl;
cout << "After 1 month: " << int(new_date2.year()) << "-"
<< unsigned(new_date2.month()) << "-"
<< unsigned(new_date2.day()) << endl;
return 0;
}
Результат выполнения кода:
"Original: 2024-3-15"
"After 10 days: 2024-3-25"
"After 1 month: 2024-4-15"
Смотрите также
-
класс
time_point,
который представляет момент времени -
функция
floor,
которая округляет время до указанной точности -
класс
system_clock,
который представляет системные часы -
функция
localtime,
которая преобразует время в локальное