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更现代可靠。
std::chrono::system_clock::now()返回一个time_point,代表系统时钟下的当前时刻,单位是纳秒级(具体精度由实现决定)。
time_t或duration才能进一步处理若要输出“2025-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(); std::chrono::system_clock本身不带时区信息,它提供的是UTC时间点;localtime等函数不是线程安全的(返回静态tm结构),多线程中应改用localtime_r(POSIX)或_localtime64_s(Windows),或改用C++20的时区扩展(C++11不支持)。
基本上就这些。C++11的chrono不复杂但容易忽略细节——记牢time_point是起点,转换才是关键。