Поле tm_mday
Поле tm_mday класса tm хранит день месяца
в диапазоне от 1 до 31. В отличие от
большинства остальных полей класса tm, нумерация
здесь начинается с единицы, а не с нуля. То есть первый
день месяца имеет значение 1, а не 0.
Это поле обычно заполняется функциями localtime
и gmtime, а также может быть задано вручную перед
вызовом функции mktime.
Синтаксис
tm_object.tm_mday
Пример
Давайте получим текущую дату и выведем день месяца:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
time_t now = time(nullptr);
tm* lt = localtime(&now);
cout << lt->tm_mday << endl;
return 0;
}
Результат выполнения кода:
15
Пример
Давайте зададим конкретную дату вручную и выведем день месяца:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
tm t = {};
t.tm_year = 2024 - 1900;
t.tm_mon = 0;
t.tm_mday = 9;
cout << t.tm_mday << endl;
return 0;
}
Результат выполнения кода:
9
Пример
Давайте проверим, как нормализуется день месяца
при переполнении через функцию mktime:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
tm t = {};
t.tm_year = 2024 - 1900;
t.tm_mon = 0;
t.tm_mday = 32;
mktime(&t);
cout << t.tm_mday << endl;
return 0;
}
Результат выполнения кода:
1
Как видно из примера, 32 января автоматически
превратилось в 1 февраля: функция mktime
нормализует значение поля и переносит лишние дни в
следующий месяц.