我正在尝试通过创建流来验证此行(01 10 2017)上的日期格式。
if(i%5==4){ //DATE
std::string date;
int day;
int month;
int year;
std::ostringstream oss(date);
oss >> day;
oss >> month;
oss >> year;
if (day >=0 && day <= 31){
return true;}
if (month >=01 && month <= 12){
return true;}
if (year >=1900){
return true;}
}
但是,代码无法编译。我该怎么做才能改进验证?
谢谢
答案 0 :(得分:2)
希望这有帮助。
Photo.Src
答案 1 :(得分:2)
我该怎么做才能改进验证?
使用经过充分测试的日期/时间库,例如Howard Hinnant's free, open source, header-only date/time library。
bool
is_DMY(const std::string& date)
{
std::istringstream in{date};
date::year_month_day ymd;
in >> date::parse("%d %m %Y", ymd);
return !in.fail();
}
使用示例:
int
main()
{
std::cout << is_DMY("30 09 2017") << '\n';
std::cout << is_DMY("31 09 2017") << '\n';
}
输出:
1
0
这证明了OP中的第一个测试:
if (day >=0 && day <= 31){
return true;}
将过早地返回true
以及#34; 31 09 2017&#34;。 9月只有30天。