【发布时间】:2012-03-15 06:06:03
【问题描述】:
是否有任何功能可以检查给定日期是否有效? 我不想从头开始写任何东西。
例如2012 年 10 月 32 日无效 并且 2010 年 10 月 10 日有效
【问题讨论】:
-
这个值是从哪里来的?它是做什么用的?
-
这是输入。我只是想检查它是否有效。
是否有任何功能可以检查给定日期是否有效? 我不想从头开始写任何东西。
例如2012 年 10 月 32 日无效 并且 2010 年 10 月 10 日有效
【问题讨论】:
如果您的字符串始终采用该格式,最简单的做法是将字符串拆分为三个部分,填充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);
【讨论】:
提升日期时间类应该能够处理您需要的内容。 见http://www.boost.org/doc/libs/release/doc/html/date_time.html
【讨论】:
如果日期的格式是固定的并且你不想使用boost,你总是可以使用strptime,在ctime header 中定义:
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)上都可用。