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

C语言如何生成YYYY-MM-DDTHH:MM:SS.SSS+HH:MM格式时间戳

解决方法

你遇到的两个问题可以分别通过高精度时间接口获取毫秒、格式化时区字符串处理冒号的需求,以下是可直接运行的实现:

实现代码(兼容非GNU环境版本)

#include <stdio.h>
#include <time.h>
#include <sys/time.h>

void current_time(char* str)
{
    struct timeval tv;
    struct tm* tm_info;
    char time_main[32] = {0};
    char tz_raw[8] = {0};
    char tz_formatted[8] = {0};
    long msec;

    // 获取带微秒精度的当前时间
    gettimeofday(&tv, NULL);
    tm_info = localtime(&tv.tv_sec);

    // 格式化年月日时分秒部分
    strftime(time_main, sizeof(time_main), "%FT%T", tm_info);
    // 计算毫秒值(微秒除以1000,补前导0到3位)
    msec = tv.tv_usec / 1000;
    // 格式化原始时区字符串(格式为±HHMM)
    strftime(tz_raw, sizeof(tz_raw), "%z", tm_info);
    // 给时区插入冒号,转为±HH:MM格式
    snprintf(tz_formatted, sizeof(tz_formatted), "%c%c%c:%c%c", 
            tz_raw[0], tz_raw[1], tz_raw[2], tz_raw[3], tz_raw[4]);

    // 拼接所有部分输出
    snprintf(str, 50, "%s.%03ld%s", time_main, msec, tz_formatted);
}

int main(void)
{
    char str[50];
    current_time(str);
    printf("%s\n", str);
}

说明

  • 若你的运行环境使用GNU glibc(多数Linux发行版默认),可以省略手动处理时区的步骤,直接用strftime的%:z格式符直接输出带冒号的时区,代码会更简洁。
  • Windows平台下没有gettimeofday接口,可以替换为GetLocalTimeAPI获取毫秒精度的时间,整体拼接逻辑保持一致即可。

内容的提问来源于stack exchange,提问作者babon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:06:05