如何在C语言代码中输出格式为[2023-07-05 15:00:07.680973]的时间戳?
在C语言中打印带微秒的格式化时间戳
要输出格式为[2023-07-05 15:00:07.680973]的时间戳,需要结合秒级时间与微秒级时间处理,以下是可直接运行的实现代码:
#include <stdio.h> #include <time.h> #include <sys/time.h> #include <string.h> int main() { struct timeval tv; struct tm tm_info; char timestamp[30]; // 预留足够空间存储格式化后的字符串 // 获取当前高精度时间(秒+微秒) gettimeofday(&tv, NULL); // 将秒数转换为本地时间结构体(线程安全版本) localtime_r(&tv.tv_sec, &tm_info); // 格式化日期与时间到秒的部分 strftime(timestamp, sizeof(timestamp), "[%Y-%m-%d %H:%M:%S", &tm_info); // 拼接6位补零的微秒部分,补全格式 snprintf(timestamp + strlen(timestamp), sizeof(timestamp) - strlen(timestamp), ".%06ld]", tv.tv_usec); // 输出最终时间戳 printf("%s\n", timestamp); return 0; }
关键说明:
gettimeofday():获取当前系统的秒级时间(tv_sec)和微秒级时间(tv_usec),是实现高精度时间的核心函数。localtime_r():线程安全的时间转换函数,把秒数转换为包含年、月、日、时、分、秒的tm结构体,避免多线程环境下的竞态问题。strftime():负责格式化日期和秒级时间,生成[YYYY-MM-DD HH:MM:SS格式的前缀。snprintf():将微秒数补零到6位(微秒范围为0-999999),拼接到前缀后形成完整格式。
注意:该代码依赖POSIX标准接口,Linux/macOS环境下直接用gcc编译即可;Windows平台需替换为GetSystemTimeAsFileTime等系统API实现微秒级时间获取。
内容的提问来源于stack exchange,提问作者Harshith k
相关产品推荐
相关产品推荐

