C++如何获取系统当前时间_C++获取毫秒级时间戳代码【工具】

std::chrono 获取毫秒级时间戳最可靠

Windows 和 Linux 下都支持,且不依赖平台 API,避免了 gettimeofdayGetSystemTimeAsFileTime 的兼容性问题。核心是用 std::chrono::system_clock 配合 time_since_epoch() 转换为毫秒。

常见错误是直接用 time(nullptr) ——它只到秒级,且返回的是 time_t,无法满足毫秒需求。

auto now = std::chrono::system_clock::now();
auto ms = std::chrono::duration_cast(now.time_since_epoch()).count();
// ms 是自 Unix epoch 起的毫秒数,类型为 long long

Windows 下用 GetSystemTimeAsFileTime 的坑

它返回的是 FILETIME(100 纳秒为单位),看似精确,但容易在转换时出错:直接减去 Windows epoch(1601 年)再除 10000 得毫秒,结果可能因 64 位整数截断或符号处理错误而偏差几秒。

跨平台封装一个毫秒时间戳函数

如果项目要同时跑在 Windows/Linux/macOS,别写两套逻辑。用 std::chrono 就够了,它在所有主流编译器(MSVC、GCC、Clang)中行为一致。

inline long long current_ms() {
    return std::chrono::duration_cast(
        std::chrono::system_clock::now().time_since_epoch()
    ).count();
}

注意时区与精度的实际限制

system_clock 表示的是系统实时时钟(wall clock),受 NTP 同步、手动调时影响,可能回跳或跳变。它不是单调时钟,不适合测间隔。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。