C++如何获取当前时间?C++ chrono库日期和时间处理教程【C++11】

18次阅读

c++11起推荐用std::chrono::system_clock::now()获取纳秒级time_point;转time_t后配合localtime/gmtime和std::put_time可格式化输出;duration_cast可提取毫秒/微秒时间戳;注意system_clock基于UTC,localtime非线程安全。

C++如何获取当前时间?C++ chrono库日期和时间处理教程【C++11】

在C++11及以后,推荐用std::chrono配合std::system_clock获取当前时间;它类型安全、精度高、无平台依赖,比旧的ctime更现代可靠。

获取当前时间点(time_point)

std::chrono::system_clock::now()返回一个time_point,代表系统时钟下的当前时刻,单位是纳秒级(具体精度由实现决定)。

  • 这是最轻量、最常用的操作,不涉及格式化,适合计时、延时、时间差计算
  • 不能直接打印,需转换为time_tduration才能进一步处理

转成可读的年月日时分秒(C风格)

若要输出“2024-05-20 14:30:45”这类格式,需先转为time_t,再用localtimegmtime解析:

  • auto tp = system_clock::now();
  • time_t t = system_clock::to_time_t(tp);
  • Struct tm* lt = localtime(&t); // 本地时间gmtime(&t) // UTC时间
  • 然后用std::put_time(lt, "%Y-%m-%d %H:%M:%S")(需格式化输出

获取毫秒/微秒级时间戳(常用于日志或性能统计)

直接从time_point提取整数型时间戳:

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

  • auto ms = duration_cast(system_clock::now().time_since_epoch()).count();
  • auto us = duration_cast(system_clock::now().time_since_epoch()).count();
  • 得到的是自纪元(1970-01-01 00:00:00 UTC)以来的毫秒/微秒数,适合排序、差值计算、写入日志

注意时区和线程安全

std::chrono::system_clock本身不带时区信息,它提供的是UTC时间点;localtime等函数不是线程安全的(返回静态tm结构),多线程中应改用localtime_r(POSIX)或_localtime64_swindows),或改用C++20的时区扩展(C++11不支持)。

基本上就这些。C++11的chrono不复杂但容易忽略细节——记牢time_point是起点,转换才是关键。

text=ZqhQzanResources