55

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

我发现了这个相关的问题。但老实说,这不可能是执行如此简单任务的最简单方法,不是吗?我希望有更简单的东西,但在std::chrono 参考中找不到任何东西。任何建议都是最受欢迎的。我不一定必须使用std::chrono,但我希望它独立于平台。

4

1 回答 1

93
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();
于 2013-04-23T19:10:17.693 回答