Разница между двумя временными метками в днях Переполнение стека

У меня есть метки времени в формате (Год месяц день) в файле XML.

Мне нужно выяснить разницу между двумя временными метками в днях.

Образцы временных меток:

<Time Stamp="20181015">

<Time Stamp="20181012">

Как я могу найти количество дней между указанными выше временными метками?

Количество дней = date2 - date1, Я рассматриваю все дни (не нужно пропускать выходные или любой другой день). Часовой пояс также не имеет значения.

PS: Я понимаю, что мне нужно проанализировать метку времени из XML. Я застрял в логике после разбора значения.

Update-1: std::chrono::year и другие подобные вещи являются частью C ++ 20. Но я получаю ошибку компиляции:

Пространство имен «std :: chrono» не имеет члена «year»

0

Решение

Есть старомодный способ:

#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';
1

Другие решения

Вы можете использовать синтаксис 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. Здесь документация для библиотеки часовых поясов.

1

По вопросам рекламы [email protected]