如何在C++中获取Unix时间戳并赋值给变量?
获取C++中的Unix时间戳
先解决你的编译报错
你遇到的'std::chrono'未声明错误,原因有两个:
- 没有包含
chrono标准库头文件 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
相关产品推荐
相关产品推荐

