在c ++中验证日期格式

时间:2017-10-07 01:55:00

标签: c++ date if-statement ostringstream

我正在尝试通过创建流来验证此行(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;}
        }

但是,代码无法编译。我该怎么做才能改进验证?

谢谢

2 个答案:

答案 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天。