我想要的只是以毫秒为单位获取纪元以来的时间并将其存储在无符号长整数中。
我找到了this related question。但老实说,这不是执行这么简单任务的最简单方法,是吗?我希望有一些更简单的东西,但在std::chrono reference中找不到任何东西。任何建议都是最受欢迎的。
我不一定要使用std::chrono
,但我希望它与平台无关。
答案 0 :(得分:72)
unsigned long milliseconds_since_epoch =
std::chrono::system_clock::now().time_since_epoch() /
std::chrono::milliseconds(1);
虽然,特别是因为你想要平台独立性,用一个更有可能足够大的类型替换unsigned long
可能更好:
(unsigned) long long
std::(u)int64_t
std::chrono::milliseconds::rep
auto
对我来说,这清楚地表明你冒着精度损失的危险(通过类比整数除法)和你要离开类型系统的安全性(通过划分一个类型给出无单位数的时间)。然而,正如评论中所表明的那样,有些人会说,任何试图摆脱类型安全的行为都应该伴随着故意使代码看起来危险的尝试。如果你需要与持有这种信念的人打交道,那么使用duration_cast
可能更简单,而不是进入关于无关风格选择的争论:
unsigned long milliseconds_since_epoch =
std::chrono::duration_cast<std::chrono::milliseconds>
(std::chrono::system_clock::now().time_since_epoch()).count();