Стандартная библиотека C++<chrono>

Введено в C++11<chrono>Библиотека используется для работы со временем и датами. Она предоставляет богатый набор инструментов для измерения временных интервалов, выполнения вычислений с моментами времени и обработки дат и времени.<chrono>Библиотека является ключевой частью стандартной библиотеки C++ для обработки операций, связанных со временем.

Основные концепции

Моменты времени

Момент времени представляет собой конкретную точку во времени, обычно связанную с определёнными часами.

Длительности

Длительность представляет собой временной интервал между двумя моментами времени.

Часы

Часы — это источник моментов времени и длительностей. C++ предоставляет несколько различных часов, таких как системные часы, часы с высоким разрешением и другие.

Базовый синтаксис

Включение заголовочных файлов

При использовании<chrono>Перед использованием библиотеки необходимо включить соответствующий заголовочный файл:

#include <chrono>

Использование моментов времени

auto now = std::chrono::system_clock::now();

Использование длительностей

auto duration = std::chrono::seconds(5);

Вычисление моментов времени

auto future_time = now + duration;

Пример

Измерение времени выполнения функции

Ниже приведён пример использования<chrono>Простой пример измерения времени выполнения функции с помощью библиотеки:

Пример

#include <iostream>
#include <chrono>

void someFunction() {
    // Имитация некоторых операций
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main() {
    auto start = std::chrono::high_resolution_clock::now();

    someFunction();

    auto end = std::chrono::high_resolution_clock::now();

    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "Функция заняла " << duration.count() << " миллисекунд на выполнение." << std::endl;

    return 0;
}

Результат вывода:

Function took 1000 milliseconds to execute.

Обработка дат и времени

<chrono>Библиотека также может использоваться для работы с датами и временем. Ниже приведён пример использованияstd::chrono::system_clockиstd::chrono::time_pointПример получения текущей даты и времени:

Пример

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    auto now = std::chrono::system_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(now);

    std::cout << "Current date and time: " << std::ctime(&now_c);

    return 0;
}

Результат вывода:

Current date and time: Fri Mar 11 12:34:56 2022

Продвинутое использование

Использование разных часов

C++ предоставляет несколько часов, например:

  • std::chrono::system_clock: Системные часы, обычно синхронизированные с системным временем.
  • std::chrono::steady_clock: Монотонные часы, не зависящие от изменений системного времени.
  • std::chrono::high_resolution_clock: Предоставляет часы с наивысшим разрешением.

Форматирование даты и времени

Вы можете использовать<iomanip>и<ctime>для форматирования даты и времени:

Пример

#include <iostream>
#include <iomanip>
#include <chrono>
#include <ctime>

int main() {
    auto now = std::chrono::system_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(now);

    std::cout << std::put_time(std::localtime(&now_c), "%Y-%m-%d %H:%M:%S");

    return 0;
}

Результат вывода:

2022-03-11 12:34:56
Другие расширения