【问题标题】:is there a way to get utc nanoseconds for a date in uint64_t in c++有没有办法在 c++ 中获取 uint64_t 中日期的 utc 纳秒
【发布时间】:2017-03-21 06:40:16
【问题描述】:

我想获取特定日期的 uint64_t 纪元以来的纳秒数,是否有任何 c++ 库中的函数来获取它。

【问题讨论】:

  • boost datetime 应该有。不确定在 ns 分辨率下可以用 64 位表示什么日期范围

标签: c++ boost utc


【解决方案1】:

您可以使用 Howard Hinnant's free, open-source date/time librarystd::chrono 扩展到日历的真实部分:

#include "date.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono_literals;
    uint64_t k = (sys_days{2017_y/mar/21} + 10h + 27min + 5s + 
                  123456789ns).time_since_epoch().count();
    std::cout << k << '\n';
}

输出:

1490092025123456789

【讨论】:

  • 请注意,霍华德的库正确地包含了自纪元开始以来的闰秒。
【解决方案2】:

如果您有权访问 C++ 11 库,请查看 std::chrono 库。您可以使用它来获取自 Unix 纪元以来的毫秒数,如下所示:

#include <chrono>

// ...

using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
    system_clock::now().time_since_epoch()
);

【讨论】:

  • 我的问题是关于可以将日期作为输入参数的函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2016-07-24
相关资源
最近更新 更多