У меня есть метки времени в формате (Год месяц день) в файле XML.
Мне нужно выяснить разницу между двумя временными метками в днях.
Образцы временных меток:
<Time Stamp="20181015">
<Time Stamp="20181012">
Как я могу найти количество дней между указанными выше временными метками?
Количество дней = date2 - date1
, Я рассматриваю все дни (не нужно пропускать выходные или любой другой день). Часовой пояс также не имеет значения.
PS: Я понимаю, что мне нужно проанализировать метку времени из XML. Я застрял в логике после разбора значения.
Update-1: std::chrono::year
и другие подобные вещи являются частью C ++ 20. Но я получаю ошибку компиляции:
Пространство имен «std :: chrono» не имеет члена «year»
Есть старомодный способ:
#include <ctime>
#include <iomanip> // std::get_time
#include <sstream>
// ...
std::string s1 = "20181015";
std::string s2 = "20181012";
std::tm tmb{};
std::istringstream(s1) >> std::get_time(&tmb, "%Y%m%d");
auto t1 = std::mktime(&tmb);
std::istringstream(s2) >> std::get_time(&tmb, "%Y%m%d");
auto t2 = std::mktime(&tmb);
auto no_of_secs = long(std::difftime(t2, t1));
auto no_of_days = no_of_secs / (60 * 60 * 24);
std::cout << "days: " << no_of_days << '\n';
Вы можете использовать синтаксис C ++ 20 сегодня (с C ++ 11/14/17), загрузив Бесплатная библиотека даты / времени Говарда Хиннанта с открытым исходным кодом. Вот как будет выглядеть синтаксис:
#include "date/date.h"#include <iostream>
#include <sstream>
int
main()
{
using namespace date;
using namespace std;
istringstream in{"<Time Stamp=\"20181015\">\n<Time Stamp=\"20181012\">"};
const string fmt = " <Time Stamp=\"%Y%m%d\">";
sys_days date1, date2;
in >> parse(fmt, date1) >> parse(fmt, date2);
cout << date2 - date1 << '\n';
int diff = (date2 - date1).count();
cout << diff << '\n';
}
Это выводит:
-3d
-3
Если вам не нужна поддержка часовых поясов (как в этом примере), тогда date.h
это один заголовок, библиотека только для заголовка. Вот полная документация.
Если вам нужна поддержка часовых поясов, для этого требуется дополнительная библиотека с заголовком и источником: tz.h / tz.cpp. Здесь документация для библиотеки часовых поясов.