获取从epoch开始以微秒为单位的当前时间戳
Get current timestamp in microseconds since epoch?
我有一个下面的代码,我们试图获得当前时间戳在微秒自epoch时间,但我们使用的是steady_clock
。
inline uint64_t get_timestamp()
{
std::chrono::time_point<std::chrono::steady_clock> ts = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}
这样做是正确的吗?因为根据我的理解,steady_clock
是用来测量时间的流逝而不是得到当前的时间?或者我应该使用system_clock
,如下所示:
inline uint64_t get_timestamp()
{
std::chrono::time_point<std::chrono::system_clock> ts = std::chrono::system_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}
我只需要使用std::chrono
包,因为这是我们所有的代码都在使用。
时钟的历元未指定。但实际上你可以这样考虑计时钟:
-
steady_clock
的纪元是应用程序启动的时间加上一个有符号的随机偏移量。也就是说,你不能指望应用程序启动时的epoch是相同的。但是epoch会在应用程序运行时保持稳定 -
system_clock
的纪元是自1970年新年以来的时间,不包括闰秒,在UTC时区。不同的实现以不同的精度实现:libc++计数微秒,VS计数1/10微秒,gcc计数纳秒。 -
high_resolution_clock
有时是steady_clock
的类型别名,有时是system_clock
的类型别名。
using time_stamp = std::chrono::time_point<std::chrono::system_clock,
std::chrono::microseconds>;
存储它,而不是uint64_t
。此类型的类型安全性将为您节省无数的运行时错误。您将在编译时发现错误。
您可以使用:
获取当前time_stamp
using namespace std::chrono;
time_stamp ts = time_point_cast<microseconds>(system_clock::now());
无法找到其他解决方案的人的另一种可能性:
uint64_t microseconds_since_epoch = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
相关文章:
- 以天C++为单位的两个时间戳之间的差异
- 将日期字符串转换为 unix 时间戳
- 如何找到纪元时间戳和 std::chrono::system_clock::now 之间的时差(以毫秒为单位)
- 如何将毫秒的日期时间字符串转换为 UNIX 时间戳
- 将具有 DST 的时间字符串转换为 UTC 时间戳
- 快速将带有时区的日期时间字符串转换为 UNIX 时间戳(C++)
- 如何将时间戳(以毫秒为单位)四舍五入到最接近的秒
- 用C或C++将当前时间从windows转换为unix时间戳
- 如何以毫秒为单位获取自 1970 年以来的当前时间戳,就像 Java 一样
- 以毫秒为单位的时间戳给了我 10 位C++数字
- 将 Unix 时间戳(以毫秒为单位)转换为正常日期
- 将字符串时间转换为UNIX时间戳
- 从 C/C++ 中的日期和时间转换为 UNIX 时间戳的正确方法是什么?
- 使用时间位置将日期时间从/转换为UTC时间戳
- 在C++中将秒转换为UNIX时间戳
- 获取从epoch开始以微秒为单位的当前时间戳
- 将boost::posix_time::ptime转换为NTP时间戳
- 将时间戳(以毫秒为单位)转换为boost中的时区
- 时间戳之间的差异(以分钟为单位)
- 将std::chrono::time_point转换为unix时间戳