You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:23:31