Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::chrono将日期添加到当前日期_C++_C++11_Chrono - Fatal编程技术网

C++ std::chrono将日期添加到当前日期

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来查找并根据到期期限计算未来的日期

过期期限是一个整数,指定“从现在起的天数”。那么如何使用chrono lib来查找100天后的日期呢?

假设您有一个。要向该对象添加天数,只需将
操作符+
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>>;