如何将格式为 HH:MM:SS 的字符串转换为 C 中的 time_t?

问题描述

如何将字符串格式为 HH:MM:SS 的命令行参数转换为 time_t 类型? 我发现的唯一解决方案是针对 C++ 并将 time_t 转换为字符串,而不是在 C 中反过来。

谢谢。

编辑:我需要在没有 string.h 的情况下实现它

我正在尝试将命令行参数和字符串(例如“13:32:41”和“13:40:35”)转换为 time_t 格式,以便我可以使用 difftime(tm1,tm2) 来获取区别。

下面的方法可行吗?

time_t string_to_time(const char* time) {
  struct tm tm = {0};
  sscanf(time,"%H:%M:%S",&tm.tm_hour,&tm.tm_min,&tm.tm_sec);
  time_t t=mktime(&tm);
  return t;
 }

解决方法

下面的方法可行吗?

是(对于有效输入)。它将返回自 1970/1/1 HH:MM:SS1970/1/1 00:00:00 的秒数。

但我不明白这一点。真的很难写吗:

int hour,min,sec;
if (sscanf(time,"%d:%d:%d",&hour,&min,&sec) != 3) return -1;
return hour * 3600 + min * 60 + sec;

在 C 中将 time_t 转换为字符串,而不是相反。

我的第一个谷歌命中 How to convert a string variable containing time to time_t type in c++? 使用 strptime 确实是用于 C++。遗憾的是,strptime 不是 part of C time.h,它来自 linux 等可用的 POSIX strptime。对于窗户,请参见示例。 strptime() equivalent on Windows? .

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...