解析通常在流上完成,而不是字符串,但您可以使用stringstream。
std::istringstream date_s( "04\\10\\1984" );
struct tm date_c;
date_s >> std::get_time( &date_c, "%d\\%m\\%Y" );
std::time_t seconds = std::mktime( & date_c );
现在您可以使用 < 比较秒数以确定哪个更早。
注意,std::get_time 是 C++11 中的新功能。它是根据strptime 定义的,它来自POSIX,但不是C99 标准的一部分。如果 C++11 库不可用,您可以使用 strptime。如果你够勇敢,你也可以使用std::time_get facet……不过这很难看。
如果您不想知道除较早日期之外的任何日期,您可以使用std::lexicographical_compare。这将是一个单行,但函数名称很长。
// return true if the date string at lhs is earlier than rhs
bool date_less_ddmmyyyy( char const *lhs, char const *rhs ) {
// compare year
if ( std::lexicographical_compare( lhs + 6, lhs + 10, rhs + 6, rhs + 10 ) )
return true;
if ( ! std::equal( lhs + 6, lhs + 10, rhs + 6 ) )
return false;
// if years equal, compare month
if ( std::lexicographical_compare( lhs + 3, lhs + 5, rhs + 3, rhs + 5 ) )
return true;
if ( ! std::equal( lhs + 3, lhs + 5, rhs + 3 ) )
return false;
// if months equal, compare days
return std::lexicographical_compare( lhs, lhs + 2, rhs, rhs+2 );
}
另见how to convert datetime to unix timestamp in c?。