Разница между двумя временными метками в днях C ++ - PullRequest
0 голосов
/ 15 октября 2018

У меня есть метки времени в формате ( Year.Month.Day ) в файле XML.

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

Примеры временных меток:

<Time Stamp="20181015">

<Time Stamp="20181012">

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

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

#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';
0 голосов
/ 15 октября 2018

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

...