c++如何获取系统当前时间 time.h库函数使用详解【功能实现】

12次阅读

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

c++如何获取系统当前时间 time.h库函数使用详解【功能实现】

C++ 获取系统当前时间,最常用且跨平台的方式是使用 (即 C 语言的 time.h)中的标准函数。它不依赖操作系统 API,简洁可靠,适合大多数基础时间获取场景。

一、获取秒级时间戳:time() 函数

time() 返回自 unix 纪元(1970-01-01 00:00:00 UTC)以来经过的秒数,类型为 time_t(通常是 longlong 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 格式化为指定格式的字符串。

立即学习C++免费学习笔记(深入)”;

  • 原型:size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
  • s 是目标缓冲区,max 是最大字节数(含结尾 ),必须确保足够大
  • 常用格式符:%Y(4位年)、%m(01–12)、%d(01–31)、%H:%M:%S(24小时制)
  • 返回实际写入字符数(不含 ),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

text=ZqhQzanResources