我试着这样解析日期时间,
char *line = "Feb 21 20:15:58";
struct tm t;
strptime (line, "%B %d %T", &t);
printf ("%ld\n", mktime (&t));输出是1,我是否使用了错误的时间格式?
发布于 2017-02-21 12:57:55
输入变量line中缺少Year。
另外,来自Linux man的
返回值
函数的返回值是指向此函数调用中未处理的第一个字符的指针。如果输入字符串包含的字符多于格式字符串所需的字符数,则返回值将紧跟在最后使用的输入字符之后。如果整个输入字符串被使用,则返回值指向字符串末尾的空字节。如果strptime()无法匹配所有格式字符串,因此出现错误,该函数将返回NULL。
和
注释
原则上,此函数不会初始化tm,而是仅存储指定的值。这意味着应该在调用之前初始化tm。
因此,除了向strptime提供year之外,还应该检查返回值,并且应该在调用函数之前初始化tm t结构。
发布于 2019-11-13 21:34:23
依赖于未初始化值
strptime()不会设置struct tm的所有成员。首先,只有.tm_mon, .tm_mday, .tm_hour, .tm_min, .tm_sec的相应成员会受到此格式的影响。最好先初始化所有成员。
// struct tm t;
struct tm t = {0};
strptime (line, "%B %d %T", &t);未设置的年份
正如@Abhineet所标识的,代码应该设置年份。也许:
time_t now = time(0);
struct tm t = *localtime(&now);
strptime (line, "%B %d %T", &t);匹配打印说明符
time_t是一些标量,通常是一个整数。它未指定为与long匹配。建议转换为宽整数类型。
printf("%lld\n", (long long) mktime(&t));https://stackoverflow.com/questions/42358914
复制相似问题