C++ 如何转换&x2018;标准::计时::持续时间<;int,std::比率<;2629746l,1l>&燃气轮机’;至‘;int’;类型?
我正在使用,并试图找到两个日期之间的总月数C++ 如何转换&x2018;标准::计时::持续时间<;int,std::比率<;2629746l,1l>&燃气轮机’;至‘;int’;类型?,c++,date,c++11,chrono,static-cast,C++,Date,C++11,Chrono,Static Cast,我正在使用,并试图找到两个日期之间的总月数 从类型“std::chrono::duration”到类型“int”的静态转换无效 int period=静态(以月为单位的期间(开始日期、结束日期)); 以下是我正在使用的函数: auto period_in_months(year_month_day start_date, year_month_day end_time) { auto total_months = ((end_time.year() - start_date.year()
从类型“std::chrono::duration”到类型“int”的静态转换无效
int period=静态(以月为单位的期间(开始日期、结束日期));
以下是我正在使用的函数:
auto period_in_months(year_month_day start_date, year_month_day end_time) {
auto total_months = ((end_time.year() - start_date.year())*12 + (end_time.month() - start_date.month()));
return (total_months--);
}
double percentage_return(string risk_profile, year_month_day start_date, year_month_day end_date) {
int period = static_cast<int>(period_in_months(start_date, end_date));
// do something
}
自动周期(以月为单位)(年、月、日开始日期、年、月、日结束时间){
自动合计月份=((结束时间.年()-开始日期.年())*12+(结束时间.月()-开始日期.月());
回报(总月数--);
}
双百分比回报(字符串风险配置文件、年月日开始日期、年月日结束日期){
int period=静态(以月为单位的期间(开始日期、结束日期));
//做点什么
}
我尝试使用
chrono::duration\u cast(period\u in\u months(start\u date,end\u date)
,但收到了相同的错误。std::chrono::duration模板的实例不能(甚至明确地)转换为int
。转换不起作用。如果查看,您会发现没有转换运算符
从std::chrono::duration\u cast的
除非ToDuration是std::chrono::duration的实例,否则函数不参与重载解析
int
不是std::chrono::duration
的实例,因此第二次尝试无效
如果再次查看
std::chrono::duration
的引用,您会发现count
成员函数
返回此持续时间的刻度数
这就是您要查找的内容。首先使用
chrono::duration\u cast
将持续时间转换为一种形式,该形式将时间表示为一个整数,并具有适当的刻度持续时间(本例中为一个月),然后调用该持续时间表示法的count
。如果您的持续时间已在所需表示法中,则不需要持续时间强制转换步骤。以下是有关此主题的文章:
本文从更多问题开始:
我们想要“完整月份”的数字吗?或者我们应该四舍五入
最接近的整数月数?还是要浮点
表示可以显示小数月份的月份
给定两个year\u month\u day
对象d1
和d2
,以下是被截断为零的月份差:
(d2.year()/d2.month() - d1.year()/d1.month())
这将返回一个名为months
的chrono
持续时间
以上内容完全忽略了每个日期的“日期”字段。如果要考虑“日期”字段并向最近的日期四舍五入:
auto dp1 = sys_days(d1);
auto dp2 = sys_days(d2);
auto delta = round<months>(dp2-dp1);
还有,我们如何将
delta
转换为int?@Shravan40:如果有帮助的话,这里有一个关于chrono的视频教程:很高兴知道日期库是建立在chrono上的。当库作者回答你的问题时,总是感觉很特别。
auto dp1 = sys_days(d1);
auto dp2 = sys_days(d2);
auto delta = round<months>(dp2-dp1);
cout << delta.count() << '\n';