我正在尝试将时间字符串转换为 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);
最佳答案
在调用mktime()
之前,代码需要初始化tm_struct()
的7+个字段:year, month,day, hour min, sec, isdst
和其他潜在的。
2 个异常(exception):.tm_yday、.tm_wday
在调用 mktime()
之前不需要赋值。
年、月、日应设置为合理的值:让我们使用 2000 年 1 月 1 日。或者代码可以使用 time_t()
获取今天。
代码使用 ms
暗示该值以毫秒为单位。它不是。还是几秒钟。
使用本地 time_t
变量而不是分配一个。 malloc()
不需要。
struct tm tm = {0};
tm.tm_year = 2000 - 1900; // Years from 1900
tm.tm_mon = 1 - 1; // Months from January
tm.tm_mday = 1;
char time_buffer[100];
int hh, mm;
float ss;
time_t time_value;
char *timestamp = "16:11:56.484";
if (sscanf(timestamp, "%d:%d:%f", &hh, &mm,&ss) != 3) Handle_BadData();
tm.tm_hour = hh;
tm.tm_min = mm;
tm.tm_sec = roundf(ss); // or simply = ss;
tm.tm_isdst = 0; // Keep in standard time
// time_value = malloc(100*sizeof(char));
time_value = mktime(&tm);
if (time_value == -1) {
printf ("unable to make time");
}
else {
strftime(time_buffer, sizeof(time_buffer), "%c", &tm);
printf(time_buffer);
}
// Sat Jan 1 16:11:56 2000
关于使用 sscanf 将字符串转换为时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31380153/