2017-06-17 89 views
3

我有一个uint64_t表示自午夜以来的纳秒数。 std :: chrono是否允许我将它转换为一个有意义的“时间”,相对简单?将纳秒(自午夜以来)转换为可打印时间?

另外,如果我有时间以来的时间,我会怎么做?

例如,在这样的格式:

14:03:27.812374923 

而同样的情况,但鉴于自新纪元纳秒时? (如果答案是显著不同)

回答

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,并且此库不仅是标头。

相关问题