【发布时间】:2017-02-08 13:31:34
【问题描述】:
我想使用 std::chrono 来根据有效期计算未来的日期。
有效期是一个整数,指定“从现在开始的天数”。那么如何使用 chrono lib 来查找 100 天后的日期呢?
【问题讨论】:
我想使用 std::chrono 来根据有效期计算未来的日期。
有效期是一个整数,指定“从现在开始的天数”。那么如何使用 chrono lib 来查找 100 天后的日期呢?
【问题讨论】:
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。
【讨论】:
<chrono> 中包含扩展?
假设你有一个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);
【讨论】:
using namespace std::litterals,然后写new_t = t + (100 * 24h),只是为了风格
std::literals,它是 C++14
std::literals 在范围内,您可以更有选择性,使用 using namespace std::literals::chrono_literals。
chrono 库不包含日历功能。没有直接的方法可以准确地实现您的要求。
您可以通过使用具有每天秒数的持续时间来找到未来 100 天的秒数的时间戳。但是 chrono 没有计算日期的工具。
【讨论】: