日期时间 & 工具函数

第 3 课:日期时间 & 工具函数 对应源文件: trantor/utils/Date.h / Date.cc — 微秒精度时间点 trantor/utils/Funcs.h — 通用辅助函数(字节序 + 字符串分割) trantor/utils/NonCopyable.h — 禁拷贝基类 一、Date:微秒精度时间点 1.1 设计思路 Date 本质上只是一个 int64_t 的包装: 1 2 3 4 5 6 class Date { private: int64_t microSecondsSinceEpoch_{0}; // 从 1970-01-01 00:00:00 UTC 至今的微秒数 public: static constexpr long MICRO_SECONDS_PER_SEC = 1000000LL; }; 为什么用微秒而不是毫秒/秒? 定时器精度要求微秒级(定时器误差 < 1ms) 日志时间戳需要显示到微秒(高频事件排查) int64_t 表示微秒可以撑到 292471年,溢出不是问题 1.2 获取当前时间:Date::now() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // Date.cc 第 52-65 行 const Date Date::date() { #ifndef _WIN32 struct timeval tv; gettimeofday(&tv, NULL); // Linux: 系统调用,精度 ~1 微秒 int64_t seconds = tv.tv_sec; return Date(seconds * MICRO_SECONDS_PER_SEC + tv.tv_usec); #else // Windows: GetLocalTime → mktime → 精度只到毫秒(wMilliseconds * 1000) timeval tv; gettimeofday(&tv, NULL); // Windows 版本在同文件里实现 ... #endif } Linux 路径:gettimeofday 是 VDSO 调用(Virtual Dynamic Shared Object),在用户空间直接读取内核映射的时钟,不陷入内核,速度极快(几十纳秒)。 ...

March 8, 2025 · 8 min · 1603 words