我有一个XML文件格式(Year.Month.Day)时间戳。
我需要找出在天两个时间戳之间的差异。
样品时间戳:
<Time Stamp="20181015">
<Time Stamp="20181012">
我如何才能找到天以上时间戳之间有多少?
天数= date2 - date1
。 我正在考虑所有的日子(不需要跳过周末或别的日子)。 时区没有关系为好。
PS:我明白,我要解析的XML的时间戳。 我被困在逻辑解析值之后。
更新1: std::chrono::year
和其他类似的东西是C ++ 20的一部分。 但我得到一个编译错误:
命名空间“的std ::时辰”没有成员“年”
还有就是老式的方法:
#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), 霍华德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。 下面是对时区的库文件 。