C++:
Порівняння двох дат
Як це зробити:
#include <iostream>
#include <chrono>
#include <iomanip>
int main() {
// Встановлення двох дат
std::tm tm1 = {};
std::tm tm2 = {};
strptime("2023-03-15", "%Y-%m-%d", &tm1);
strptime("2023-03-20", "%Y-%m-%d", &tm2);
// Конвертація в time_point
std::chrono::system_clock::time_point tp1 = std::chrono::system_clock::from_time_t(mktime(&tm1));
std::chrono::system_clock::time_point tp2 = std::chrono::system_clock::from_time_t(mktime(&tm2));
// Порівняння дат
if (tp1 < tp2)
std::cout << "Перша дата раніше другої." << std::endl;
else if (tp1 > tp2)
std::cout << "Перша дата пізніше другої." << std::endl;
else
std::cout << "Дати однакові." << std::endl;
return 0;
}
Вивід:
Перша дата раніше другої.
Поглиблений огляд:
Історія: Порівняння дат – стара проблема в комп’ютерних науках. Спочатку це було здійснено через операції зі строками або числами.
Альтернативи: Існують бібліотеки, як boost::date_time
чи старі методи std::mktime
і std::difftime
, але std::chrono
є засобом сучасного C++, який запроваджений для стандартної бібліотеки.
Деталі реалізації: std::chrono
використовує точні часові точки (time_points
) для представлення моментів у часі та тривалостей (durations
). Це дозволяє зробити порівняння точними та безпечними для типів.
Дивись також:
- C++ reference про
std::chrono
: https://en.cppreference.com/w/cpp/chrono - Документація по
boost::date_time
: https://www.boost.org/doc/libs/1_75_0/doc/html/date_time.html - Tutorial по роботі із датами і часом в C++: https://www.learncpp.com/cpp-tutorial/date-and-time/