boost :: gregorian :: date.day_number()返回Julian日期

时间:2017-09-05 12:55:16

标签: datetime boost

我注意到boost::gregorian::date(1970,1,1).day_number()返回2440588,这是其朱利安日期。

这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分: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-01-01:

<强> 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-Jan-01至9999-Dec-31。许多参考文献将使用Julian日历表示1582年之前的日期,因此如果需要在历史日期进行准确计算,请务必谨慎。参见Reingold的“日历计算”和&amp; Dershowitz了解更多细节。来自Calendrical Calculations的日期信息已被用于交叉测试公历实现的正确性。