有没有办法strptime()
处理固定格式的时间字符串?
我需要解析一个始终采用固定宽度格式的时间字符串:“ yymmdd HHMMSS
”,但复杂的是有时存在前导零,有时不存在。
在我的 man(3p) 页面上阅读时,strptime
我注意到对于所有转换说明符%y, %m, %d, %H, %M, %S
,都评论说“应允许前导零,但不应要求。”。因此,我尝试使用格式说明符%y%m%d %H%M%S
,天真地希望它strptime
能够识别两个子字符串中的空格,%y%m%d
并且%H%M%S
等同于(缺少)前导零。
这似乎适用于说明符%m
,但不适用于%M
(好吧,除非第二部分小于 10),如以下代码所示
#include <stdio.h>
#include <time.h>
int main() {
struct tm buff;
const char ts[]="17 310 22 312";
char st[14];
strptime(ts,"%y%m%d %H%M%S", &buff);
strftime(st,14,"%y%m%d %H%M%S",&buff);
printf("%s\n",ts);
printf("%s\n",st);
return 0;
}
在我的机器输出上编译和运行时
17 310 22 312
170310 223102
任何有关如何克服这个问题的见解都将不胜感激,或者我是否需要在使用atoi
转换为整数来填充我的struct tm
实例时手动切断字符串 2 个字符?