C ++检查日期是否有效

时间:2012-02-24 19:19:52

标签: c++ date time

是否有任何功能来检查给定日期是否有效? 我不想从头开始写任何东西。

e.g。 32/10/2012无效 和10/10/2010有效

4 个答案:

答案 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;