C语言中将%b %d %H:%M格式字符串转换为time_t类型的实现方法
实现方案
你不需要修改原有代码,只需要在原有逻辑后新增转换代码即可,核心通过strptime解析固定格式的时间字符串,再用mktime转为time_t类型:
// 原有代码完全保留,无需任何修改 time_t t = time(NULL); struct tm *tm = localtime(&t); char time[100]; strftime(time, 100, "%b %d %H:%M", tm); // 新增转换逻辑 struct tm parse_tm = {0}; // 按照你指定的格式解析时间字符串 strptime(time, "%b %d %H:%M", &parse_tm); // 补全年份(你的时间格式未携带年份,默认复用当前系统年份) parse_tm.tm_year = tm->tm_year; // 可选处理跨年场景:如果解析出的时间晚于当前时间,默认归为上一年 time_t target_time = mktime(&parse_tm); if (target_time > t) { parse_tm.tm_year -= 1; target_time = mktime(&parse_tm); } // target_time 即为转换得到的 time_t 类型变量
注意事项
- 你的时间格式未包含年份,默认复用当前系统年份,如果有特殊年份需求可自行修改
parse_tm.tm_year的赋值逻辑,tm_year为1900年到目标年份的偏移值。 - Windows原生库没有提供
strptime实现,可自行引入兼容版本的strptime代码,无需调整原有生成时间字符串的逻辑。 - 转换逻辑复用了
localtime的时区信息,和你原有代码的时区逻辑完全一致,不会出现时间偏移问题。
内容的提问来源于stack exchange,提问作者rascadux
相关产品推荐
相关产品推荐

