我现在使用了boost :: gregorian :: date。
我可以看到有相关的月份&岁月周持续时间类型。 我可以看到如何使用已知的持续时间来推进给定的日期。
Qu :但我怎样才能在几个月(或几年或几周)内得出两个日期之间的差异?
我希望找到像以下这样的功能:
template<typename DURATION>
DURATION date_diff<DURATION>(const date& d1,const date& d2);
也需要处理四舍五入。
此函数将返回d1和d2之间(比方说)整月的数量。
答案 0 :(得分:12)
你的意思是日期之间的差异(09/12 - 08/05 = 01/07 = 19个月)或时间差((date2_seconds - date1_seconds)/ seconds_per_month)?
对于第一种情况,可以使用访问者
greg_year date::year() const;
greg_month date::month() const;
然后是几个月的日期差异:
int months = (data2.year() - date1.year())*12 + date2.month() - date1.month()
对于第二种情况,您有操作员
date_duration date::operator-(date) const;
并且date_duration具有以下有用成员:
long date_duration::days() const;
所以你可以这样做:
//date date1, date2
int months = (date2-date1).days()/30;