我正在尝试在Windows上的C中将时间字符串转换为时间格式。因为我的字符串中只有小时,分钟和秒,所以尝试使用sscanf将字符串解析为时间格式,然后使用mktime。但不知何故,它没有把它转换成时间格式。为了检查,我试图将转换后的时间打印成字符串。代码如下:
struct tm tm;
char time_buffer[100];
int hh, mm;
float ms;
time_t time_value;
char *timestamp = {"16:11:56.484"};
sscanf(timestamp, "%d:%d:%f", &hh, &mm,&ms);
tm.tm_hour =hh;
tm.tm_min = mm;
tm.tm_sec = ms*1000;
tm.tm_isdst = -1;
time_value = malloc(100*sizeof(char));
time_value = mktime(&tm);
if (time_value==-1)
printf ("unable to make time");
strftime(time_buffer, sizeof(time_buffer), "%c", &tm);
printf(time_buffer);
答案 0 :(得分:4)
struct tm
tm_hour
但只设置tm_min
,tm_sec
,tm_isdst
和struct tm
。所有其他字段均未初始化,因此具有未知/未定义的值。memset(&tm, 0, sizeof(tm))
初始化0
,则可能仍然会收到错误,因为结构占据的字段并非全部允许{ {1}}为有效值(tm_mday
)。请参阅docs以供参考。tm_sec
中输入的值可能无效。您实际上希望它是ms/1000
,而不是ms*1000
。答案 1 :(得分:2)
在致电mktime()
之前,代码需要初始化tm_struct()
:year, month,day, hour min, sec, isdst
的7个字段。其他人也可以初始化,但他们被忽略。
年,月,日应该设置为合理的:让我们使用2000年1月1日。或者代码可以使用time_t()
来获取今天。
代码使用ms
暗示该值以毫秒为单位。它不是。它仍然在几秒钟内。
使用本地time_t
变量而不是分配一个变量。 <{1}}不需要。
malloc()