解析通常在流上完成,而不是字符串,但你可以使用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 );
Run Code Online (Sandbox Code Playgroud)
现在,您可以比较秒数,<以确定哪个更早.
注意,这std::get_time是C++ 11中的新功能.它是strptime根据POSIX 定义的,但不是C99标准的一部分.strptime如果C++ 11库不可用,则可以使用.如果你很勇敢,你也可以使用这个std::time_get方面......但它很难看.
如果您不想了解其他日期以外的日期,可以使用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 );
}
Run Code Online (Sandbox Code Playgroud)
另请参见如何在c中将datetime转换为unix时间戳?.
| 归档时间: |
|
| 查看次数: |
29675 次 |
| 最近记录: |