Сравнение двух дат

C++:
Сравнение двух дат

Как это сделать:

C++ упрощает жизнь с помощью заголовочного файла <chrono>.

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

int main() {
    using namespace std::chrono;

    // Создаем точки времени system_clock
    system_clock::time_point today = system_clock::now();
    system_clock::time_point someDay = system_clock::now() - hours(24); // Вчера

    // Конвертируем в time_t для сравнения
    time_t today_time_t = system_clock::to_time_t(today);
    time_t someDay_time_t = system_clock::to_time_t(someDay);

    if (today_time_t > someDay_time_t) {
        std::cout << "Today is after someDay.\n";
    } else if (today_time_t < someDay_time_t) {
        std::cout << "Today is before someDay.\n";
    } else {
        std::cout << "Dates are the same.\n";
    }

    return 0;
}

Пример вывода:

Сегодня после некоторого дня.

Углубленный взгляд:

С C++11 <chrono> стало тем местом, где всё происходит для даты и времени. До этого скорее всего приходилось иметь дело с <ctime> и структурами вроде tm. Не самый удобный вариант.

Альтернативы? Конечно, есть сторонние библиотеки вроде Boost.DateTime. Но зачем усложнять, когда есть <chrono>, который постоянно развивается.

Детали реализации, которые стоит иметь под рукой:

  • std::chrono работает с точками времени и продолжительностями.
  • system_clock измеряет реальное время.
  • time_point - это конкретная точка во времени (например, дата).
  • time_t - арифметический тип, удобный для сравнений.

Смотрите также: