C++ Дата & Время

Стандартная библиотека C++ не предоставляет так называемый тип даты. C++ наследует структуры и функции из языка C для операций с датой и временем. Чтобы использовать функции и структуры, связанные с датой и временем, необходимо включить заголовочный файл <ctime> в программу на C++.

Существует четыре типа, связанных со временем:clock_t、time_t、size_tиtmТипы clock_t, size_t и time_t могут представлять системное время и дату в виде некоторого целого числа.

тип структурыtmДата и время хранятся в виде C-структуры. Структура tm определяется следующим образом:

struct tm { int tm_sec; // Секунды, обычный диапазон от 0 до 59, но допускается до 61 int tm_min; // Минуты, диапазон от 0 до 59 int tm_hour; // Часы, диапазон от 0 до 23 int tm_mday; // День месяца, диапазон от 1 до 31 int tm_mon; // Месяц, диапазон от 0 до 11 int tm_year; // Количество лет с 1900 года int tm_wday; // День недели, диапазон от 0 до 6, начиная с воскресенья int tm_yday; // День года, диапазон от 0 до 365, начиная с 1 января int tm_isdst; // Летнее время };

Ниже приведены важные функции, связанные с датой и временем в C/C++. Все эти функции являются частью стандартной библиотеки C/C++. Вы можете найти подробную информацию о каждой функции в стандартной библиотеке C++.

Порядковый номерФункции и описание
1time_t time(time_t *time);
Эта функция возвращает текущее календарное время системы — количество секунд, прошедших с 1 января 1970 года. Если у системы нет времени, она возвращает -1.
2char *ctime(const time_t *time);
Эта функция возвращает указатель на строку, содержимое которой представляет местное время в формате:
Www Mmm dd hh:mm:ss yyyy\n\0

Где:

  • Www: день недели (например, Tue)
  • Mmm: месяц (например, Jul)
  • dd: день (например, 29)
  • hh:mm:ss: время (24-часовой формат)
  • yyyy: год (например, 2025)
  • Заканчивается символом новой строки\nи завершающий нуль\0

Пример возвращаемого значения:

"Tue Jul 29 19:12:15 2025\n\0"
3struct tm *localtime(const time_t *time);
Эта функция возвращает указатель на структуру, представляющую локальное время.tmУказатель на структуру.
4clock_t clock(void);
Эта функция возвращает процессорное время, использованное с момента начала выполнения программы (обычно с начала программы). Если время недоступно, она возвращает -1.
5char * asctime ( const struct tm * time );
Эта функция возвращает указатель на строку. Строка содержит информацию, хранящуюся в структуре, на которую указывает time. Формат возврата: day month date hours:minutes:seconds year\n\0.
6struct tm *gmtime(const time_t *time);
Эта функция возвращает указатель на time, где time — это структура tm, выраженная в скоординированном всемирном времени (UTC), также известном как среднее время по Гринвичу (GMT).
7time_t mktime(struct tm *time);
Эта функция возвращает календарное время, которое эквивалентно времени, хранящемуся в структуре, на которую указывает time.
8double difftime ( time_t time2, time_t time1 );
Эта функция возвращает разницу в секундах между time1 и time2.
9size_t strftime();
Эту функцию можно использовать для форматирования даты и времени в заданный формат.

Текущая дата и время

Следующий пример получает текущую системную дату и время, включая местное время и Всемирное координированное время (UTC).

Пример

#include <iostream> #include <ctime> using namespace std; int main( ) { // Текущая дата/время на основе текущей системы time_t now = time(0); // Преобразовать now в строковую форму char* dt = ctime(&now); cout << "Местная дата и время:" << dt << endl; // Преобразовать now в структуру tm tm *gmtm = gmtime(&now); dt = asctime(gmtm); cout << "Дата и время UTC:"<< dt << endl; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

本地日期和时间:Sat Jan  8 20:07:41 2011

UTC 日期和时间:Sun Jan  9 03:07:41 2011

Форматирование времени с использованием структуры tm

tmЭта структура особенно важна при работе с операциями, связанными с датой и временем, в C/C++. Структура tm хранит дату и время в виде структуры C. Большинство функций, связанных со временем, используют структуру tm. В приведённом ниже примере применяются структура tm и различные функции, связанные с датой и временем.

Прежде чем практиковаться в использовании структур, вам нужно базовое понимание структур C и знать, как использовать оператор стрелки -> для доступа к членам структуры.

Пример

#include <iostream> #include <ctime> using namespace std; int main( ) { // Текущая дата/время на основе текущей системы time_t now = time(0); cout << "Количество секунд, прошедших с 1970 года:" << now << endl; tm *ltm = localtime(&now); // Вывод компонентов структуры tm cout << "Год:"<< 1900 + ltm->tm_year << endl; cout << "Месяц:"<< 1 + ltm->tm_mon<< endl; cout << "День:"<< ltm->tm_mday << endl; cout << "Время:"<< ltm->tm_hour << ":"; cout << ltm->tm_min << ":"; cout << ltm->tm_sec << endl; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

1970 到目前时间:1503564157
年: 2017
月: 8
日: 24
时间: 16:42:37
Другие расширения