Calendar 为什么日历天数的总和从1开始。AD到1.1.2001与热带日相差3?

Calendar 为什么日历天数的总和从1开始。AD到1.1.2001与热带日相差3?,calendar,date-conversion,Calendar,Date Conversion,作为一个小背景:1582年10月引入了儒略历来纠正儒略历的问题,儒略历在此之前一直在使用。公历更精确地指定了一年的长度,添加了新的闰年计算,并在过渡期从儒略历中删除了10天(从1582年10月4日移动到1582年10月15日) 要总结从公元1年到公元2001年的所有日历日,我使用: #include <stdio.h> int main( void) { int year; int daysInYear; int total; total =

作为一个小背景:1582年10月引入了儒略历来纠正儒略历的问题,儒略历在此之前一直在使用。公历更精确地指定了一年的长度,添加了新的闰年计算,并在过渡期从儒略历中删除了10天(从1582年10月4日移动到1582年10月15日)

要总结从公元1年到公元2001年的所有日历日,我使用:

#include <stdio.h>

int  main( void)
{
   int   year;
   int   daysInYear;
   int   total;

   total = 0;
   for( year = 1; year <= 2001; year++)
   {
     //
      daysInYear = 365;
      if( year < 1582)
         daysInYear += ((year % 4) == 0);
      else
         if( year > 1582)
            daysInYear += ((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0);
         else
            daysInYear -= 10;  // 1582 exactly
      total += daysInYear;

      printf( "%d: +%d = %d\n", year, daysInYear, total);
   }
   return( 0);
}
现在的问题是:2001年1月1日是730487个日历日。考虑到公历365.2425年的长度,我预计2000*365.2425=730485天。如果你使用太阳日或太阳日,它将是730484。但740487显然超出了范围

假设没有人错误计算公历范围内的任何天数,那么在儒略历中还有一些与热带天数不匹配的额外天数。但格里高利历是为了修正儒略历而创建的,我不认为他们会在1582年犯那么大的错误


这可能更像是一个历史问题,而不是一个编程问题。

公历改革的目标是将北半球春分的日期重置为3月21日,并保持不变。之所以选择这一日期,是因为这是公元325年尼西亚委员会成立时春分的大致平均日期。在委员会成立时,春分的日期从公元1年的3月25日左右开始下滑

要了解所有细节,请阅读这本书,它是梵蒂冈天文台于1983年举行的一次会议的记录


为了澄清,在评估公历与儒略历的比较时,使用儒略历和公历日期的组合,包括10天的一次性修正,旨在修正从公元325年到公元1582年的累计超额闰年。如果希望使用除公元325年以外的开始日期,整个计算应仅使用公历日期或朱利安日期。

公历改革的目标是将北半球春分的日期重置为3月21日,并保持不变。之所以选择这一日期,是因为这是公元325年尼西亚委员会成立时春分的大致平均日期。在委员会成立时,春分的日期从公元1年的3月25日左右开始下滑

要了解所有细节,请阅读这本书,它是梵蒂冈天文台于1983年举行的一次会议的记录


为了澄清,在评估公历与儒略历的比较时,使用儒略历和公历日期的组合,包括10天的一次性修正,旨在修正从公元325年到公元1582年的累计超额闰年。如果希望使用除公元325年以外的开始日期,则整个计算应仅使用公历日期或朱利安日期。

感谢链接,这非常有趣。(Lilius文章第193页描述了在1582年取消10天的计划,因为它已经实施。)但我并不认为这能回答我的问题。与其从公元1年1月1日0小时开始计算,不如从公元325年左右开始计算;具体来说,让我们使用325年1月1日的0小时,并且始终使用0小时。在325年1月1日至2001年1月1日之间,612146个日历日过去了,这也是通过计算实际的昼夜来观察的天数。使用公历中一天的平均长度365.2425,我们估计1676年将包含612146.43天。使用截至2000年的热带年平均长度(以秒为单位),我们估计1676年包含612146.43天。没有异议。所以我基本上是在公元325年之前加上几天,改革并不能弥补这一点。这就是我得到额外天数的地方。谢谢谢谢你的链接,非常有趣。(Lilius文章第193页描述了在1582年取消10天的计划,因为它已经实施。)但我并不认为这能回答我的问题。与其从公元1年1月1日0小时开始计算,不如从公元325年左右开始计算;具体来说,让我们使用325年1月1日的0小时,并且始终使用0小时。在325年1月1日至2001年1月1日之间,612146个日历日过去了,这也是通过计算实际的昼夜来观察的天数。使用公历中一天的平均长度365.2425,我们估计1676年将包含612146.43天。使用截至2000年的热带年平均长度(以秒为单位),我们估计1676年包含612146.43天。没有异议。所以我基本上是在公元325年之前加上几天,改革并不能弥补这一点。这就是我得到额外天数的地方。谢谢
#include <stdio.h>

int  main( void)
{
   int   year;
   int   daysInYear;
   int   total;

   total = 0;
   for( year = 1; year <= 2001; year++)
   {
     //
      daysInYear = 365;
      if( year < 1582)
         daysInYear += ((year % 4) == 0);
      else
         if( year > 1582)
            daysInYear += ((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0);
         else
            daysInYear -= 10;  // 1582 exactly
      total += daysInYear;

      printf( "%d: +%d = %d\n", year, daysInYear, total);
   }
   return( 0);
}
1: +365 = 365
2: +365 = 730
3: +365 = 1095
4: +366 = 1461
...
100: +366 = 36525  
...
400: +366 = 146100
...
1581: +365 = 577460  
1582: +355 = 577815
1583: +365 = 578180
...
1900: +365 = 693962
...
1996: +366 = 729026
1997: +365 = 729391
1998: +365 = 729756
1999: +365 = 730121
2000: +366 = 730487