检查ISO 8601日期格式是否有效

时间:2019-06-24 07:49:00

标签: c++ date format iso

如何在C ++中检查日期字符串是否为ISO 8601格式(例如2018-12-25T12:00:00+04:00)? 尝试使用strptime来检查日期字符串是否为有效的ISO 8601格式,但没有给出正确的结果。

1 个答案:

答案 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秒,但是如果您愿意在同一链接上安装我的时区支持库,它也可以这样做。它会检查语法是否无效以及日期和时间是否无效。