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- арифметический тип, удобный для сравнений.
Смотрите также:
- Справочник C++ для
<chrono>: https://en.cppreference.com/w/cpp/header/chrono - Сравнение библиотек даты и времени: http://www.boost.org/doc/libs/1_64_0/doc/html/date_time.html
- Хороший старый
<ctime>, если вы чувствуете ностальгию или мазохизм: https://en.cppreference.com/w/cpp/header/ctime