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

标签 c++ date format iso

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

最佳答案

我知道的最简单的方法是使用 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

这不允许闰秒,但如果您愿意在同一个链接上安装我的时区支持库,它也可以这样做。它会检查无效语法和无效日期和时间。

关于c++ - 检查 ISO 8601 日期格式是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56732027/

相关文章:

c++ - 以原子方式清除无符号整数的最低非零位

php - 如果日期早于日期则显示错误

python - 如何在Python中使用Pandas将 "dd.mm.yyyy"转换为 "yyyy-mm-dd"?

java - 为什么 DecimalFormat 显示 ▯ 而不是逗号?

C++ 无法搜索其他偶数命令名称

C++ 模板和内存分配

java - 从午夜到日期对象的秒数

C++ : Formatting output text to . doc/.docx/.rtf(第 2 部分)

html - 使用 CSS 将数字格式化为货币

c++ - C++如何组织(管理)第三方库?