【发布时间】:2012-06-04 07:00:10
【问题描述】:
我正在执行以下操作来转换和检查日期,但是,我不确定为什么以下日期一直验证为真。
%d 不会只检查[01,31] + leading zeros 吗?有没有更好更准确的方法?
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main () {
struct tm tm;
char buffer [80];
char *str = "29/Jan/2012";
if (strptime (str, "%Y/%b/%d", &tm) == NULL)
exit(EXIT_FAILURE);
if (strftime (buffer,80,"%Y-%m-%d",&tm) == 0)
exit(EXIT_FAILURE);
printf("%s\n", buffer); // prints 29-01-20
return 0;
}
【问题讨论】:
-
%d只能读取 1 或 2 位数字,因此它带有20。当然,它与sscanf()中的%d不同。
标签: c validation date strftime strptime