在天C上两个时间戳之间的差异++(Difference between two timestamps

2019-10-29 15:02发布

我有一个XML文件格式(Year.Month.Day)时间戳。

我需要找出在天两个时间戳之间的差异。

样品时间戳:

<Time Stamp="20181015">

<Time Stamp="20181012">

我如何才能找到天以上时间戳之间有多少?

天数= date2 - date1 。 我正在考虑所有的日子(不需要跳过周末或别的日子)。 时区没有关系为好。

PS:我明白,我要解析的XML的时间戳。 我被困在逻辑解析值之后。

更新1: std::chrono::year和其他类似的东西是C ++ 20的一部分。 但我得到一个编译错误:

命名空间“的std ::时辰”没有成员“年”

Answer 1:

还有就是老式的方法:

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


Answer 2:

您可以通过下载今天使用C ++ 20的语法(与C ++ 11/14/17), 霍华德Hinnant(欣南特)的免费,开源的日期/时间库 。 下面是语法是什么样子:

#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。 下面是对时区的库文件 。



文章来源: Difference between two timestamps in days C++