获取自纪元以来以微秒为单位的当前时间戳?
Get current timestamp in microseconds since 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
的纪元是您的应用程序启动的时间加上已签名的随机偏移量。 IE。您不能依赖于跨应用程序启动的时代相同。但是当应用程序 运行ning.
时,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();
我有一个下面的代码,我们试图从中获取自纪元以来以微秒为单位的当前时间戳,但我们使用的是 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
的纪元是您的应用程序启动的时间加上已签名的随机偏移量。 IE。您不能依赖于跨应用程序启动的时代相同。但是当应用程序 运行ning. 时,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();