使用sscanf将字符串转换为时间

时间:2015-07-13 09:48:10

标签: c string time

我正在尝试在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);

2 个答案:

答案 0 :(得分:4)

  1. 您没有initialize struct tm tm_hour但只设置tm_mintm_sectm_isdststruct tm。所有其他字段均未初始化,因此具有未知/未定义的值。
  2. 如果您使用memset(&tm, 0, sizeof(tm))初始化0,则可能仍然会收到错误,因为结构占据的字段并非全部允许{ {1}}为有效值(tm_mday)。请参阅docs以供参考。
  3. 您在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()