将纳秒(从午夜开始)转换为可打印时间?

时间:2017-06-17 14:42:17

标签: c++ c++11 chrono

我有一个uint64_t表示自午夜以来的纳秒数。 std :: chrono会让我把它转换成一个有意义的“时间”,相对简单吗?

另外,如果我有时间以来我怎么办呢?

例如以这种格式:

14:03:27.812374923

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

1 个答案:

答案 0 :(得分:2)

您可以使用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,而且此库不仅仅是标题。