检查ISO 8601日期格式是否有效 如何检查C++中的日期字符串是否为ISO 8601格式(如代码> 2018-1225T12:0:00 +04:00 )? 尝试使用strTime检查日期字符串是否为有效的ISO 8601格式,但没有给出正确的结果。
我知道的最简单的方法是使用:检查ISO 8601日期格式是否有效 如何检查C++中的日期字符串是否为ISO 8601格式(如代码> 2018-1225T12:0:00 +04:00 )? 尝试使用strTime检查日期字符串是否为有效的ISO 8601格式,但没有给出正确的结果。,c++,date,format,iso,C++,Date,Format,Iso,我知道的最简单的方法是使用: 这不允许闰秒,但如果您愿意在同一链接上安装我的时区支持库,它也可以这样做。它会检查无效的语法和无效的日期和时间。我知道的最简单的方法是使用: 这不允许闰秒,但如果您愿意在同一链接上安装我的时区支持库,它也可以这样做。它检查无效的语法和无效的日期和时间。< /P>请不要在C++中使用 。你能举一个例子来说明你的问题吗?@TarickWelling谢谢你的回答。我需要检查日期是否有效。我使用strTime(“2019-06-24T09:00:00Z”,%Y-%m-%dT
这不允许闰秒,但如果您愿意在同一链接上安装我的时区支持库,它也可以这样做。它会检查无效的语法和无效的日期和时间。我知道的最简单的方法是使用:
这不允许闰秒,但如果您愿意在同一链接上安装我的时区支持库,它也可以这样做。它检查无效的语法和无效的日期和时间。< /P>请不要在C++中使用<代码> <代码>。你能举一个例子来说明你的问题吗?@TarickWelling谢谢你的回答。我需要检查日期是否有效。我使用strTime(“2019-06-24T09:00:00Z”,%Y-%m-%dT%H:%m:%SZ”,&tm)来检查给定的日期对于我得到结果的上述格式是否有效。同样,我如何检查带有偏移量的日期格式“2019-06-24T09:00:00+04:00”是否有效?什么是“有效”的定义?是
2018-2-30T12:00:00:00
还是2018-2-20T25:00:00
valid?那么2016-12-31T23:59:60
(有闰秒)呢?@l.F.从上下文来看,OP的意思似乎很清楚,“根据ISO 8601日期格式标准有效”换句话说,如果其他库/程序期望一个“有效的ISO 8601格式日期”,他的方法是否会生成一个这些库/程序可以接受的日期?然而,我认为这个问题应该作为的副本关闭(我投票赞成重新打开它,这样它就可以重新关闭)请不要在C++中使用<代码> <代码>。你能举一个例子来说明你的问题吗?@TarickWelling谢谢你的回答。我需要检查日期是否有效。我使用strTime(“2019-06-24T09:00:00Z”,%Y-%m-%dT%H:%m:%SZ”,&tm)来检查给定的日期对于我得到结果的上述格式是否有效。同样,我如何检查带有偏移量的日期格式“2019-06-24T09:00:00+04:00”是否有效?什么是“有效”的定义?是2018-2-30T12:00:00:00
还是2018-2-20T25:00:00
valid?那么2016-12-31T23:59:60
(有闰秒)呢?@l.F.从上下文来看,OP的意思似乎很清楚,“根据ISO 8601日期格式标准有效”换句话说,如果其他库/程序期望一个“有效的ISO 8601格式日期”,他的方法是否会生成一个这些库/程序可以接受的日期?然而,我认为这个问题应该作为的副本关闭(我投票赞成重新打开它,这样它就可以重新关闭)。
#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