Класс tm
Класс tm - это структура из заголовочного файла <ctime>, которая хранит дату и время, разбитые на отдельные компоненты. В отличие от time_t, представляющего время одним числом, tm позволяет удобно читать и изменять отдельные поля: год, месяц, день месяца, часы, минуты, секунды и другие. Структура содержит следующие основные поля: tm_year - количество лет, прошедших с 1900 года; tm_mon - номер месяца от 0 (январь) до 11 (декабрь); tm_mday - день месяца от 1 до 31; tm_hour - часы от 0 до 23; tm_min - минуты от 0 до 59; tm_sec - секунды от 0 до 60; tm_wday - день недели от 0 (воскресенье) до 6 (суббота); tm_yday - день года от 0 до 365; tm_isdst - флаг летнего времени.
Синтаксис
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
Пример
Давайте получим текущее время с помощью функции localtime и выведем его компоненты:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
time_t t = time(nullptr);
tm* now = localtime(&t);
cout << "Year: " << now->tm_year + 1900 << endl;
cout << "Month: " << now->tm_mon + 1 << endl;
cout << "Day: " << now->tm_mday << endl;
cout << "Hour: " << now->tm_hour << endl;
cout << "Minute: " << now->tm_min << endl;
cout << "Second: " << now->tm_sec << endl;
return 0;
}
Результат выполнения кода:
"Year: 2024"
"Month: 5"
"Day: 17"
"Hour: 14"
"Minute: 30"
"Second: 45"
Пример
Давайте создадим структуру tm вручную, заполним её поля и преобразуем в строку с помощью strftime:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
tm date = {};
date.tm_year = 2024 - 1900;
date.tm_mon = 4;
date.tm_mday = 17;
date.tm_hour = 14;
date.tm_min = 30;
date.tm_sec = 45;
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &date);
cout << buffer << endl;
return 0;
}
Результат выполнения кода:
"2024-05-17 14:30:45"
Пример
Давайте преобразуем структуру tm обратно в time_t с помощью функции mktime:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
tm date = {};
date.tm_year = 2024 - 1900;
date.tm_mon = 4;
date.tm_mday = 17;
date.tm_hour = 14;
date.tm_min = 30;
date.tm_sec = 45;
time_t t = mktime(&date);
cout << t << endl;
return 0;
}
Результат выполнения кода:
1715949045