【问题标题】:Convert nanoseconds (since midnight) to printable time?将纳秒(从午夜开始)转换为可打印时间?
【发布时间】:2017-06-17 14:42:16
【问题描述】:

我有一个uint64_t 代表自午夜以来的纳秒数。 std::chrono 是否允许我相对简单地将其转换为有意义的“时间”?

另外,如果我从纪元开始有时间,我会怎么做?

例如以这样的格式:

14:03:27.812374923

同样的情况,但是自纪元以来的纳秒时间? (如果答案明显不同)

【问题讨论】:

    标签: c++ c++11 chrono


    【解决方案1】:

    您可以使用Howard Hinnant's, free, open-source, header-only library 来执行此操作:

    #include "date.h"
    #include <cstdint>
    #include <iostream>
    
    int
    main()
    {
        using namespace std;
        using namespace std::chrono;
        using namespace date;
    
        uint64_t since_midnight = 50607812374923;
        cout << make_time(nanoseconds{since_midnight}) << '\n';
    
        uint64_t since_epoch = 1499522607812374923;
        cout << sys_time<nanoseconds>{nanoseconds{since_epoch}} << '\n';
    }
    

    这个输出:

    14:03:27.812374923
    2017-07-08 14:03:27.812374923
    

    或者您是否需要为since_epoch 考虑闰秒?

        cout << utc_time<nanoseconds>{nanoseconds{since_epoch}} << '\n';
    
    2017-07-08 14:03:00.812374923
    

    对于后面的计算,你需要"tz.h" documented here,而且这个库不仅仅是头文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多