You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中获取Unix时间戳并赋值给变量?

获取C++中的Unix时间戳

先解决你的编译报错

你遇到的'std::chrono'未声明错误,原因有两个:

  1. 没有包含chrono标准库头文件
  2. std::chrono是C11及以后才引入的特性,需要确保编译器启用C11或更高版本

解决方法:

  • 在代码开头添加头文件:#include <chrono>
  • 编译时指定C++版本,比如用GCC编译:g++ -std=c++11 your_program.cpp

为什么你的代码不对

std::chrono::steady_clock::now()返回的是时间点对象,不是整数,不能直接赋值给int变量。而且steady_clock是单调时钟,它的时间点和真实日历时间无关,不适合用来获取Unix时间戳——Unix时间戳是基于UTC时间(1970-01-01 00:00:00至今的时长),应该用std::chrono::system_clock。

正确获取Unix时间戳的代码示例

以下是获取秒级、毫秒级Unix时间戳的完整代码:

#include <chrono>
#include <iostream>

int main() {
    // 获取当前系统时间点(关联UTC时间)
    auto now = std::chrono::system_clock::now();
    
    // 转换为秒级Unix时间戳(返回long long类型,避免溢出)
    long long timestamp_sec = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count();
    std::cout << "秒级Unix时间戳:" << timestamp_sec << std::endl;
    
    // 转换为毫秒级Unix时间戳
    long long timestamp_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
    std::cout << "毫秒级Unix时间戳:" << timestamp_ms << std::endl;
    
    return 0;
}

关键知识点解释

  • std::chrono::system_clock:唯一关联真实日历时间的标准时钟,适合获取Unix时间戳
  • time_since_epoch():返回从时钟的纪元(对system_clock来说就是1970-01-01 UTC)到当前时间的时长
  • duration_cast<>:将时长转换为指定的时间单位(秒、毫秒等)
  • count():将时长对象转换为对应的数值类型(比如秒对应long long)

内容的提问来源于stack exchange,提问作者Belt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:05:16