检查 string 类型的日期和时间是否合法的函数。

Linux平台下开发一个软件,要做一个检查日期和时间是否合法功能:如 20091333。

 

1.  找到关于日期合法性验证的函数,其思路及代码实现如下:

 

对日期时间进行合法性验证,通过后再设置本机日期时间。时间的合法性检查比较简单,而日期就复杂一些,需要考虑大小月,闰年。

思路是:先对年月日进行简单的范围检查,之后将其形成一个tm结构,再调用mktime将该tm转换为一个time_t,在此过程中mktime将对不合法的日期自动进行规范化,如输入为2007-6-31将被转化为2007-7-1。因此比较转换前后的年月日是否相同就能知道日期是否合法。为了便于比较,再调用localtime将time_t转化为tm进行比较。根据比较结果来验证日期是否合法。

文章出处:http://www.diybl.com/course/3_program/c++/cppsl/2008126/97446.html
本人对日期合法性的验证实现方法做了部分修改,以适应string类型的日期。

 

 #include <string> using namespace std; bool check_date(string dateString) { string dateStr(dateString); string tmp; tmp = dateStr.substr(0, 4); int year = atoi(tmp.c_str()); tmp = dateStr.substr(4, 2); int month = atoi(tmp.c_str()); tmp = dateStr.substr(6, 2); int day = atoi(tmp.c_str()); if (year < 1900 || month <= 0 || month > 12 || day <= 0 || day > 31){ return false; } //form time struct tm tm_new; tm_new.tm_year = year - 1900; tm_new.tm_mon = month - 1; tm_new.tm_mday = day; tm_new.tm_hour = 0; tm_new.tm_min = 0; tm_new.tm_sec = 0; time_t time_new = mktime(&tm_new); localtime_r(&time_new, &tm_new); if (tm_new.tm_year != year - 1900 || tm_new.tm_mon != month - 1 || tm_new.tm_mday != day){ return false; } else{ return true; } }

 

 

2.  自己实现的对时间进行合法性验证的函数。

     代码如下:

 

     bool check_time(string timeString) { BString timeStr(executionTime); BString tmp; tmp = timeStr.substr(0,2); int n = atoi(tmp.c_str ()); if(n < 0 || n > 24){ return false; } tmp = timeStr.substr(2,2); n = atoi(tmp.c_str()); if(n < 0 || n > 59){ return false; } tmp = timeStr.substr(4,2); n = atoi(tmp.c_str()); if(n < 0 || n > 59){ return false ; } return true; }

 

你可能感兴趣的:(Date,linux,String,struct,平台)