C++跨平台获取系统当前时间最常用方式是使用库:先调用time()获取秒级时间戳,再用localtime()或gmtime()转为struct tm,最后通过strftime()格式化输出。

C++ 获取系统当前时间,最常用且跨平台的方式是使用 (即 C 语言的 time.h)中的标准函数。它不依赖操作系统 API,简洁可靠,适合大多数基础时间获取场景。
一、获取秒级时间戳:time() 函数
time() 返回自 Unix 纪元(1970-01-01 00:00:00 UTC)以来经过的秒数,类型为 time_t(通常是 long 或 long long)。
- 调用方式简单:
time_t now = time(nullptr);,传入nullptr表示不写入缓冲区 - 若传入非空指针(如
time_t t;后传&t),结果会同时存入该变量 - 失败时返回
(time_t)(-1),建议简单校验(尤其嵌入式或异常环境)
二、转换为可读时间:localtime() 与 gmtime()
time_t 是整数,需转为日历时间结构 struct tm 才能提取年月日、时分秒等字段。
-
localtime(&now):按本地时区解析,考虑夏令时 -
gmtime(&now):按 UTC(格林威治时间)解析,无时区偏移 - 两者均返回
struct tm*,注意返回的是静态内存地址,不可长期保存或跨线程共享 -
struct tm中月份从0开始(0=Jan),年份为距 1900 的偏移(如 2024 →tm_year = 124)
三、格式化输出:strftime() 安全转字符串
直接用 printf 输出 tm 成员易出错,推荐用 strftime() 将 struct tm 格式化为指定格式的字符串。
- 原型:
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm); -
s是目标缓冲区,max是最大字节数(含结尾\0),必须确保足够大 - 常用格式符:
%Y(4位年)、%m(01–12)、%d(01–31)、%H:%M:%S(24小时制) - 返回实际写入字符数(不含
\0),0 表示缓冲区不足或格式错误
四、完整示例:打印本地当前时间
以下代码演示从获取到格式化的一体流程:
#include#include #include int main() { time_t now = time(nullptr); if (now == -1) { std::cerr << "获取时间失败\n"; return 1; }
struct tm* lt = localtime(&now); // 转本地时间 if (!lt) { std::cerr zuojiankuohaophpcnzuojiankuohaophpcn "时间解析失败\n"; return 1; } char buf[64]; if (strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", lt) == 0) { std::cerr zuojiankuohaophpcnzuojiankuohaophpcn "格式化失败\n"; return 1; } std::cout zuojiankuohaophpcnzuojiankuohaophpcn "当前时间:" zuojiankuohaophpcnzuojiankuohaophpcn buf zuojiankuohaophpcnzuojiankuohaophpcn '\n'; return 0;}
输出类似:当前时间:2024-06-15 14:23:08











