如何用strftime输出带毫秒的ISO 8601格式当前时间字符串?
解决C语言生成带毫秒的ISO 8601时间格式问题
你当前的代码缺少毫秒部分,而且strftime确实没有直接输出毫秒的格式符。可以通过拆分拼接的方式补全需求,同时修正时区格式(将%z输出的+0100调整为+01:00),具体实现如下:
#include <stdio.h> #include <sys/time.h> #include <string.h> int main(){ struct timeval tv; struct tm *local_tm; char buf[30]; char iso_time[30]; gettimeofday(&tv, NULL); local_tm = localtime(&tv.tv_sec); // 生成基础时间框架(不含毫秒,时区为+0100格式) strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", local_tm); // 插入毫秒并修正时区格式 snprintf(iso_time, sizeof(iso_time), "%.20s.%03d%.3s:%2s", buf, (int)(tv.tv_usec / 1000), buf+20, buf+22); printf("ISO 8601时间: %s\n", iso_time); return 0; }
关键说明:
- 毫秒获取:
struct timeval的tv_usec字段存储微秒数,除以1000得到毫秒,用%03d保证输出三位(不足补零)。 - 时区格式修正:截取
strftime输出的时区部分,将+0100拆分为+01和00,中间插入冒号得到+01:00。 - 字符串拼接:通过
snprintf分部分拼接,确保最终格式完全匹配Python的isoformat()输出。
输出示例:
ISO 8601时间: 2024-01-16T09:32:46.090+01:00
内容的提问来源于stack exchange,提问作者RubenLaguna
相关产品推荐
相关产品推荐

