是否有任何功能来检查给定日期是否有效? 我不想从头开始写任何东西。
e.g。 32/10/2012无效 和10/10/2010有效
答案 0 :(得分:7)
如果您的字符串始终采用该格式,则最简单的方法是将字符串拆分为三个组件,填充tm
结构并将其传递给mktime()
。如果它返回-1则表示它不是有效日期。
您还可以使用Boost.Date_Time来解析它:
string inp("10/10/2010");
string format("%d/%m/%Y");
date d;
d = parser.parse_date(inp, format, svp);
答案 1 :(得分:4)
提升日期时间类应该能够处理您需要的内容。 见http://www.boost.org/doc/libs/release/doc/html/date_time.html
答案 2 :(得分:2)
如果日期格式不变且您不想使用提升,则可以始终使用strptime
标题中定义的ctime
:
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";
答案 3 :(得分:0)
如果以编程方式插入斜杠(我会假设,因为你假设它们总是在那里。),最好分别验证月,日和年。例如:
if ( (month < 1) || (month > 12) ) return false;