C++ std::chrono将日期添加到当前日期
我想使用std::chrono来查找并根据到期期限计算未来的日期 过期期限是一个整数,指定“从现在起的天数”。那么如何使用chrono lib来查找100天后的日期呢?假设您有一个。要向该对象添加天数,只需将C++ std::chrono将日期添加到当前日期,c++,c++11,chrono,C++,C++11,Chrono,我想使用std::chrono来查找并根据到期期限计算未来的日期 过期期限是一个整数,指定“从现在起的天数”。那么如何使用chrono lib来查找100天后的日期呢?假设您有一个。要向该对象添加天数,只需将操作符+与std::chrono::hours一起使用即可: #include <chrono> std::chrono::system_clock::time_point t = std::chrono::system_clock::now(); std::chrono::sy
操作符+
与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);
#包括
std::chrono::system_clock::time_point t=std::chrono::system_clock::now();
标准:时钟:系统时钟:时间点新时间t=t+标准:时钟:小时(100*24);
chrono库不包含日历功能。没有直接的方法可以准确地实现你的要求
通过使用持续时间与每天秒数的比率,您可以找到一个时间戳,该时间戳在未来相当于100天的秒数。但是chrono没有计算日期的工具。Howard Hinnant的是免费的(开源);它通过日历服务扩展了
:
#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';
}
如果您想在不使用第三方库的情况下进行此类计算,我强烈建议您创建一个chrono::duration days
,如下所示:
using days = std::chrono::duration
<int, std::ratio_multiply<std::ratio<24>, std::chrono::hours::period>>;
using days=std::chrono::duration
;
现在,您可以将
天{100}
添加到系统时钟::时间点
也可以使用命名空间std::literals
然后,编写新的时间=t+(100*24h)
,仅用于样式OK,太好了,我可以将时间点转换为历元吗?我想将这一时刻存储在一个数据库中,以一种可以从其他数据库移植的格式services@DragonRock现在编辑您的评论已经太晚了,但正确的拼写是std::literals
,它是C++14,您可以更具选择性,使用名称空间std::literals::chrono_literals
如果你不想让整个std::literals
都在范围内。看起来很好,我会跟进。任何计划你都会在std的
中包含扩展吗?@PiotrSkotnicki:处理它:成功的几率是50%@HowardHinnant 50%?我看不到任何竞争性的提案,这一个是我想要的,那么为什么任何头脑正常的人都会反对这一点呢?Chrono TS至少应该是一个不需要动脑筋的人。@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个关于正确处理这个问题的不同意见。在我写这篇文章时,这些链接的服务器已经关闭,但希望这是暂时的。
using days = std::chrono::duration
<int, std::ratio_multiply<std::ratio<24>, std::chrono::hours::period>>;