2017-09-05 16 views
1

私は、boost::gregorian::date(1970,1,1).day_number()がそのユリウス日である2440588を返すことに気付きました。boost :: gregorian :: date.day_number()はユリウスの日付を返します

これはバグですか、何か不足していますか?

+0

あなたは何をしようとしていますか?まさにこの問題は何ですか? –

+0

私は2日間の日付の差を計算したいと思っています。私は、エポック・スタートがブースト・ドキュメンテーション(www.boost.org/doc/libs/1_62_0/doc/html/date_time/gregorian.htmlの一番下にあります。 )。 –

答えて

0

日の日付の差:

Live On Coliru

#include <boost/date_time/gregorian/greg_date.hpp> 
#include <iostream> 

int main() { 
    using boost::gregorian::date; 
    date a(1712, 1, 1); 
    date b(1713, 1, 1); 

    std::cout << (b - a).days() << "\n"; // 366, includes 30th February 1712 
} 

エポックは1400年1月1日である:

Live On Coliru

auto epoch = boost::gregorian::gregorian_calendar::epoch(); 
std::cout << date(epoch.year, epoch.month, epoch.day) << "\n"; 

introduction section in the documentationは言う:

実装カレンダーは1582年にグレゴリオ暦の最初の採択前に戻って日付を拡張し、「先発グレゴリオ暦」現在の実装では、範囲1400-月の日付をサポートしています-01〜9999-Dec-31。多くの参考文献は、ユリウス暦を使用して1582年より前の日付を表しますので、歴史的な日付に正確な計算が必要な場合は注意が必要です。詳細については、Reingoldによるカレンダー計算を参照してください。& Dershowitz Calregrical Calculationsの日付情報は、グレゴリオ暦の実装の正しさをクロステストするために使用されています。

+0

私もそれを読んでいます。しかし、 'boost :: gregorian :: date(1400,1,1).day_number()'は '2232400'なので、真のゼロはまだ6000年以上前です。 1400年1月1日より前の日付は作成できません。 –

+0

したがって、 'day_number()'は 'epoch()'からの日数を実際にはカウントしないので、これは私の質問には答えません。あなたはなにか考えはありますか? –

+0

あなたのエポックの定義は間違った前提に基づいているようです(エポックは厳密に定義された用語ではありません)。それ以外は、ドキュメントが混乱しているかもしれません。 – sehe

関連する問題