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

在C++11及以后,推荐用std::chrono配合std::system_clock获取当前时间;它类型安全、精度高、无平台依赖,比旧的ctime更现代可靠。
获取当前时间点(time_point)
std::chrono::system_clock::now()返回一个time_point,代表系统时钟下的当前时刻,单位是纳秒级(具体精度由实现决定)。
- 这是最轻量、最常用的操作,不涉及格式化,适合计时、延时、时间差计算
- 不能直接打印,需转换为
time_t或duration才能进一步处理
转成可读的年月日时分秒(C风格)
若要输出“2024-05-20 14:30:45”这类格式,需先转为time_t,再用localtime或gmtime解析:
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_s(Windows),或改用C++20的时区扩展(C++11不支持)。
基本上就这些。C++11的chrono不复杂但容易忽略细节——记牢time_point是起点,转换才是关键。










