如何将std::chrono::monotonic_clock::now()
转换为毫秒并将其转换为长?
使用chrono的steady_clock或high_resolution_clock也是一样的。我已经看到了std::chrono::duration_cast<std::chrono::milliseconds>
,但我只想要当前的时间戳,而不是任何持续时间的差距。
答案 0 :(得分:8)
当前时间戳是根据某个时间点定义的(因此它是一个持续时间)。例如,相对于Epoch的开头(1970年1月1日,在Unix中)获得时间戳是“典型的”。您可以使用time_since_epoch()
:
namespace chr = std::chrono;
chr::time_point<chr::steady_clock> tp = chr::steady_clock::now();
std::cout << "hours since epoch: "
<< chr::duration_cast<chr::hours>(tp.time_since_epoch()).count()
<< '\n';
要获取以毫秒为单位的值,您需要将其强制转换为std::chrono::milliseconds
。
答案 1 :(得分:3)
所有内置时钟都有一个相关的“纪元”,这是它们的基准时间。没有指定纪元的实际日期/时间,并且可能因时钟而异。
如果你只是想要一个数字进行比较,那么某个时钟 ::now().time_since_epoch()
会给你一个duration
的时间,因为那个时钟的纪元,你可以转换到count()
类型的duration
成员的整数。其单位取决于时钟的period
。如果您需要特定单位,请先使用duration_cast
:
typedef std::chrono::steady_clock clk;
unsigned long long milliseconds_since_epoch=
std::chrono::duration_cast<std::chrono::milliseconds>(
clk::now().time_since_epoch()).count();
正如我所说,这只对比较有用,而不是绝对的时间戳,因为时间没有说明。
如果您需要UNIX时间戳,则需要使用std::chrono::system_clock
,其to_time_t()
函数可将time_point
转换为time_t
。
或者,您可以在程序中的特定点获取基线计数,以及gettimeofday
之类的相应时间,然后使用它来将相对计数转换为绝对时间。