有没有函数可以检查给定的日期是否有效?我不想从头开始编写。
例如,32/10/2012是无效的,而10/10/2010是有效的。
tm
结构,并将其传递给 mktime()
。如果返回值为-1,则不是有效日期。string inp("10/10/2010");
string format("%d/%m/%Y");
date d;
d = parser.parse_date(inp, format, svp);
ctime
头文件中定义的strptime
函数:const char date1[] = "32/10/2012";
const char date2[] = "10/10/2012";
struct tm tm;
if (!strptime(date1, "%d/%m/%Y", &tm)) std::cout << "date1 isn't valid\n";
if (!strptime(date2, "%d/%m/%Y", &tm)) std::cout << "date2 isn't valid\n";
strptime()
是一个非标准扩展,不是所有系统(包括Windows)都可用。 - spencercw最近我遇到了一个类似的问题,但不幸的是没有找到boost
的解决方法,mktime
也没有解决我的问题。所以我决定手动检查日期时间。希望能帮到别人。
bool isDateAndtimeValid( std::vector<int> time ) {
if( time[1]> 12) return false; //month
if( time[2]> 31 ) return false; //day
if( time[2] == 31 and ( time[1] == 4 or time[1] == 6 or time[1] == 9 or time[1] == 11 ) ) return false; //30 days in Apr, Jun, Sen, Nov
if( time[1] == 2) {
if( time[2] > 29 ) return false;
if( time[2] == 29 and ( ( time[0]%100 )%4 != 0) ) return false;
} //Feb
if( time[3] > 23) return false; //hours
if( time[4] > 59 ) return false; //min
if( time[5] > 59) return false; //sec
return true;
}