如何在C ++中检查日期字符串是否为ISO 8601格式(例如2018-12-25T12:00:00+04:00
)?
尝试使用strptime来检查日期字符串是否为有效的ISO 8601格式,但没有给出正确的结果。
答案 0 :(得分:0)
我知道的最简单的方法是使用Howard Hinnant's free, open-source date lib:
#include "date/date.h"
#include <iostream>
#include <sstream>
bool
is_valid(const std::string& s)
{
using namespace std;
using namespace date;
istringstream in{s};
local_seconds tp;
in >> parse("%FT%T%Ez", tp);
return !in.fail();
}
void
test(const std::string& s)
{
std::cout << s << " is" << (is_valid(s) ? "" : " not") << " valid\n";
}
int
main()
{
test("2018-12-25T12:00:00+04:00");
test("2019-06-24T09:00:00+04:00");
test("2018-2-30T12:00:00:00+04:00");
test("2018-2-20T25:00:00+04:00");
test("2016-12-31T23:59:60+04:00");
}
输出:
2018-12-25T12:00:00+04:00 is valid
2019-06-24T09:00:00+04:00 is valid
2018-2-30T12:00:00:00+04:00 is not valid
2018-2-20T25:00:00+04:00 is not valid
2016-12-31T23:59:60+04:00 is not valid
这不允许leap秒,但是如果您愿意在同一链接上安装我的时区支持库,它也可以这样做。它会检查语法是否无效以及日期和时间是否无效。