从纪元开始,以毫秒为单位获得时间,最好使用C ++ 11 chrono

时间:2013-04-23 19:07:55

标签: c++ c++11 chrono

我想要的只是以毫秒为单位获取纪元以来的时间并将其存储在无符号长整数中。

我找到了this related question。但老实说,这不是执行这么简单任务的最简单方法,是吗?我希望有一些更简单的东西,但在std::chrono reference中找不到任何东西。任何建议都是最受欢迎的。 我不一定要使用std::chrono,但我希望它与平台无关。

1 个答案:

答案 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();