Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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++ 如何转换&x2018;标准::计时::持续时间<;int,std::比率<;2629746l,1l>&燃气轮机’;至‘;int’;类型?_C++_Date_C++11_Chrono_Static Cast - Fatal编程技术网

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';