2017-02-08 142 views

回答

5

假设你有time_point。为了天添加到对象,你可以只使用operator+std::chrono::hours

#include <chrono> 
std::chrono::system_clock::time_point t = std::chrono::system_clock::now(); 
std::chrono::system_clock::time_point new_t = t + std::chrono::hours(100 * 24); 
+2

也可以'使用命名空间std :: litterals',然后写'new_t = t +(100 * 24h)',只用于样式 – tforgione

+0

好吧,很好,我可以将time_point转换为纪元吗?我想以一种可以从其他服务中移植的格式存储数据库中的那一刻 – cateof

+1

@DragonRock现在编辑你的评论已经太晚了,但正确的拼写是'std :: literals'而且它是C++ 14 – rustyx

1

计时库不包含日历功能。没有直接的方法来准确地实现你所要求的。

你可以找到一个时间戳,是值得的秒仅限100天未来使用的持续时间为每天秒的比率。但是chrono没有计算日期的工具。

5

Howard Hinnant的date library是免费的(开源);它延伸<chrono>与历法的服务:

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

int 
main() 
{ 
    using namespace date; 
    using namespace std::chrono; 
    auto now = system_clock::now(); 
    auto today = floor<days>(now); 
    year_month_day future = today + days{100}; 
    std::cout << future << '\n'; 
} 

上述程序获取当前时间system_clock::now(),然后截断time_point拥有的days精度。然后添加100 days以查找未来time_point,然后将其转换为供人类消费的{year, month, day}结构。

的输出是目前:

2017-05-19 

如果你想要做这种类型的计算没有第三方库的好处,我强烈建议建立一个chrono::duration days像这样:

using days = std::chrono::duration 
    <int, std::ratio_multiply<std::ratio<24>, std::chrono::hours::period>>; 

现在,你可以添加days{100}system_clock::time_point

+1

看起来不错,我会跟进。 – cateof

+0

任何计划你会在std的''包括扩展? –

+1

@PiotrSkotnicki:关于它的工作:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html成功的机会是50/50。 –