2017-09-05 90 views
1

我注意到,boost::gregorian::date(1970,1,1).day_number()回報2440588,這是它的公曆日期。的boost ::陽曆:: date.day_number()返回Julian日期

這是一個錯誤還是我錯過了什麼?

+0

你到底想幹什麼?究竟是什麼問題? –

+0

我想計算天數兩個日期之間的區別,我不知道什麼是「時代的開始」,是提升文檔(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說:

的實現日曆是一個「proleptic公曆」,這之前的公曆的第一個採納擴展的歷史可以追溯到1582年的當前實現支持在1400 - 揚的日期範圍-01至9999-Dec-31。許多參考文獻將使用Julian日曆表示1582年之前的日期,因此如果歷史日期需要精確計算,則需要謹慎。請參閱Reingold的Calendrical Calculations & Dershowitz瞭解更多詳情。來自Calendrical Calculations的日期信息已用於交叉測試公曆日曆實施的正確性。

+0

我也讀過。但是'boost :: gregorian :: date(1400,1,1).day_number()'是'2232400',所以真正的零日在此之前還是6000多年。而且您無法在1400年1月1日之前創建日期。 –

+0

所以這並不能回答我的問題,因爲'day_number()'實際上並不包括'epoch()'以來的天數。你有什麼想法? –

+0

似乎你對時代的定義可能是基於錯誤的假設(時代不是一個硬定義的術語)。除此之外,文件可能會帶來混淆。 – sehe