【发布时间】:2017-06-10 08:47:16
【问题描述】:
我的代码有点问题。我需要检查用户给定的日期是否有效。我想使用 2 个规则来检查它: 1. 日期是日历中的有效日期(例如 29.2.2015 无效,因为 2015 年 2 月只有 28 天) 2. 日和月最多只能是 2 个数字(例如第 10 天和第 02 天有效,但 010和 002 不是)。感谢所有帮助!
到目前为止,这是我的代码:
void dateValidator(const char *date1) {
struct tm date = {0};
int day1;
int month1;
int year1;
int vday;
int vmonth;
int vyear;
sscanf(date1, "%3d.%3d.%d",&day1,&month1,&year1);
/**How do I check that if sscanf reads more than 2 characters on month and day, date is
invalid?**/
date.tm_year = year1 - 1900;
date.tm_mon = month1 - 1;
date.tm_mday = day1;
date.tm_isdst = -1;
vday = date.tm_mday;
vmonth = date.tm_mon;
vyear = date.tm_year;
mktime(&pvm);
if ((vday != date.tm_mday) || (vmonth != date.tm_mon) || (vyear != date.tm_year)) {
/**This doesnt seem to work**/
printf("Invalid date");
}
}
【问题讨论】:
-
mktime()不验证范围。 10 月 40 日悄悄地转换为 11 月 9 日。 -
好的,所以我需要单独检查闰日等?
-
您可以使用
mktime()“转换”并检查转换后的值是否等于原始值。 -
但这就是我在那里所做的?我使用 mktime 进行转换,然后检查新值是否等于原始值
vday != date.tm_mday。 -
您在比较中使用了
pvm来调用mktime()和date。