std :: chrono将天数添加到当前日期

cat*_*eof 3 c++ c++11 c++-chrono

我想使用std :: chrono,以便根据到期时间来计算未来的日期.

到期时间是一个整数,指定"从现在起的天数".那么如何使用chrono lib来查找100天后的日期呢?

Som*_*ken 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);
Run Code Online (Sandbox Code Playgroud)

  • 也可以`使用命名空间std :: litterals`然后编写`new_t = t +(100*24h)`,仅用于样式 (2认同)

How*_*ant 5

Howard Hinnant的日期库是免费的(开源); 它<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';
}
Run Code Online (Sandbox Code Playgroud)

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

目前的输出是:

2017-05-19
Run Code Online (Sandbox Code Playgroud)

如果你想在没有第三方库的情况下进行这种类型的计算,我强烈建议你chrono::duration days这样做:

using days = std::chrono::duration
    <int, std::ratio_multiply<std::ratio<24>, std::chrono::hours::period>>;
Run Code Online (Sandbox Code Playgroud)

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

  • @TemplateRex:竞争提案就是这两篇论文:open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0215r0.html和open-std.org/jtc1/sc22/wg21/docs/papers/2016 /p0216r0.html.这也是委员会极具争议的话题.把20个委员会成员放在一个房间里,你会得到25个不同意见,以正确的方式来处理这个话题.在我写这篇文章时,这些​​链接的服务器已关闭,但希望这是暂时的. (2认同)