如何将"std::chrono::d uration<int, std::ratio<2629746l, 1l> >"转换为"int"类型?
How to convert ‘std::chrono::duration<int, std::ratio<2629746l, 1l> >’ to ‘int’ type?
我正在使用Howard Hinnant的日期库,并试图找到两个日期之间的总月数。
invalid static_cast from type ‘std::chrono::duration<int, std::ratio<2629746l, 1l> >’ to type ‘int’ int period = static_cast<int>(period_in_months(start_date, end_date));
下面是我使用的函数:
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
}
我尝试使用chrono::duration_cast<int>(period_in_months(start_date, end_date)
,但收到相同的错误。
这里有一篇关于这个主题的文章:
https://github.com/HowardHinnant/date/wiki/Examples-and-Recipes deltamonths
文章以更多问题开头:
我们想要"完整月"的数量吗?或许我们应该凑近到最接近整数月份的数是多少?还是需要一个浮点数可以显示小数月份的月份表示?
给定两个year_month_day
对象d1
和d2
,以下是截断为零的月差:
(d2.year()/d2.month() - d1.year()/d1.month())
返回chrono
的持续时间称为months
。
上面的代码完全忽略了每个日期的day字段。如果您想要考虑日期字段并向最接近的方向舍入:
auto dp1 = sys_days(d1);
auto dp2 = sys_days(d2);
auto delta = round<months>(dp2-dp1);
还有一种方法可以获得本文中显示的浮点月份的差异。
一旦你有了任意精度、任意表示的chrono
持续时间,你就可以用chrono::duration
的.count()
成员函数得到该表示的值:
cout << delta.count() << 'n';
std::chrono::duration
模板的实例不能(甚至显式地)转换为int
。石膏不起作用。如果你看一下这个引用,你会发现没有转换操作符。
从std::chrono::duration_cast
的参考中你会发现
函数不参与重载解析,除非ToDuration是std::chrono::duration的实例。
int
不是std::chrono::duration
的实例,所以你的第二次尝试不会成功。
如果你再看一下std::chrono::duration
的引用,你会发现count
成员函数,
返回此持续时间的滴答数。
这就是你要找的。首先使用chrono::duration_cast
将持续时间转换为一种形式,该形式将时间表示为带有适当的刻度持续时间(在本例中为一个月)的整数,然后对该持续时间表示调用count
。如果您的持续时间已经是所需的表示形式,则无需执行持续时间转换步骤。
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- EASTL矢量<向量<int>>连续的
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- 'structstd::对<int,int>'没有名为'push_back'