Полное руководство по дате и времени в C++
Стандартная библиотека C++ не предоставляет собственного типа даты. C++ наследует структуры и функции для работы с датой и временем из C. Для доступа к ним нужно подключить заголовочный файл <ctime>.
Существует четыре временных типа: clock_t, time_t, size_t и tm. Типы clock_t, size_t и time_t способны представлять системное время и дату как целое число.
Структура tm хранит дату и время в виде C-структуры со следующими элементами:
struct tm {
int tm_sec; // секунды минуты (0-61)
int tm_min; // минуты часа (0-59)
int tm_hour; // часы дня (0-24)
int tm_mday; // день месяца (1-31)
int tm_mon; // месяц года (0-11)
int tm_year; // год с 1900
int tm_wday; // дни с воскресенья
int tm_yday; // дни с 1 января
int tm_isdst; // часы летнего времени
}
Важные функции для работы с датой и временем (все в стандартной библиотеке C/C++):
| № | Функция и назначение |
|---|---|
| 1 | time_t time(time_t *time); Возвращает текущее календарное время системы в секундах, прошедших с 1 января 1970 года. Если система не имеет времени, возвращает -1. |
| 2 | char *ctime(const time_t *time); Возвращает указатель на строку вида день месяц год часы:минуты:секунды год\n\0. |
| 3 | struct tm *localtime(const time_t *time); Возвращает указатель на структуру tm, представляющую местное время. |
| 4 | clock_t clock(void); Возвращает значение, приближающее время работы программы. Возвращает -1, если время недоступно. |
| 5 | char *asctime(const struct tm *time); Возвращает указатель на строку с информацией из структуры |
| 6 | struct tm *gmtime(const time_t *time); Возвращает указатель на время в виде структуры |
| 7 | time_t mktime(struct tm *time); Возвращает календарное время, эквивалентное времени в структуре, на которую указывает |
| 8 | double difftime(time_t time2, time_t time1); Вычисляет разницу в секундах между |
| 9 | size_t strftime(); Форматирует дату и время в заданном формате. |
Текущая дата и время
Пример получения текущей системной даты и времени, как местного, так и UTC:
Live Demo#include <iostream>
#include <ctime>
using namespace std;
int main() {
// текущая дата/время на основе системного времени
time_t now = time(0);
// преобразование в строковую форму
char* dt = ctime(&now);
cout << "The local date and time is: " << dt << endl;
// преобразование в структуру tm для UTC
tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "The UTC date and time is:" << dt << endl;
}
Результат (пример):
The local date and time is: Sat Jan 8 20:07:41 2011 The UTC date and time is: Sun Jan 9 03:07:41 2011
Форматирование времени с помощью struct tm
Структура tm критически важна для работы с датой и временем в C/C++. Большинство временных функций используют её. Пример использования различных функций и структуры tm (предполагается базовое понимание структур и оператора ->):
#include <iostream>
#include <ctime>
using namespace std;
int main() {
time_t now = time(0);
cout << "Number of sec since January 1,1970 is:: " << now << endl;
tm *ltm = localtime(&now);
// вывод компонентов tm
cout << "Year:" << 1900 + ltm->tm_year << endl;
cout << "Month: " << 1 + ltm->tm_mon << endl;
cout << "Day: " << ltm->tm_mday << endl;
cout << "Time: " << 5 + ltm->tm_hour << ":";
cout << 30 + ltm->tm_min << ":";
cout << ltm->tm_sec << endl;
}
Результат (пример):
Number of sec since January 1,1970 is:: 1588485717 Year:2020 Month: 5 Day: 3 Time: 11:31:57
Язык C
- Расчет напряжения и тока в реактивных DC цепях
- Освоение переменных, литералов и констант в C++: подробное руководство
- Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
- Управление памятью в C++: экспертное использование new и delete
- Публичное, защищённое и приватное наследование в C++: подробный разбор
- Дружественные функции и классы в C++: мастерство контроля доступа
- Получение текущей даты и времени в Python: практическое руководство
- Структуры C++ против классов: практическое руководство для разработчиков встроенных систем
- Перегрузка в C++: функции и операторы — подробное руководство
- Ввод-вывод в файлы в C++: чтение и запись с fstream