ブーストを使用してC++で2つの日付の間に経過した年数を計算する簡単で短いアプローチがあるかどうか疑問に思っていますか?
例: (YYYY-MM-DD):
2005-01-01 から 2006-01-01 は 1 年
2005-01-02 から 2006-01-01 は 0 年
このようなコードを使用してうるう年がないと仮定すると、簡単に計算できます。
boost::gregorian::date d1( 2005, 1, 1 );
boost::gregorian::date d2( 2006, 1, 1 );
boost::gregorian::date_duration d3 = d1 - d2;
std::cout << abs( d3.days() ) / 365;
しかし、このようなコードでは、2000 年はうるう年であり、うるう年を考慮したいので、2000-01-02 と 2001-01-01 の違いは 1 年です。
// 編集
年を整数にしたいと思います。私はそのようなコードを作成しました(現在は機能していると思います)が、ブーストについて私よりも優れた知識を持っている人がいれば、エレガントなソリューションに感謝します:
boost::gregorian::date d1( 2005, 4, 1 );
boost::gregorian::date d2( 2007, 3, 1 );
int _yearsCount = abs( d1.year() - d2.year() );
// I want to have d1 date earlier than d2
if( d2 < d1 ) {
boost::gregorian::date temp( d1 );
d1 = boost::gregorian::date( d2 );
d2 = temp;
}
// I assume now the d1 and d2 has the same year
// (the later one), 2007-04-01 and 2007-03-1
boost::gregorian::date d1_temp( d2.year(), d1.month(), d1.day() );
if( d2 < d1_temp )
--_yearsCount;