【问题标题】:Why does the sum of calendar days from 1. AD to 1.1.2001 differ from tropical days by 3?为什么从公元 1 年到 2001 年 1 月 1 日的历日总和与热带日相差 3?
【发布时间】:2019-11-04 17:11:41
【问题描述】:

作为一点背景知识:1582 年 10 月,Gregorian calendar 被引入以纠正当时使用的儒略历的问题。公历更精确地指定了一年的长度,添加了新的闰年计算,并在转换时从儒略历中删除了 10 天(从 1582 年 10 月 4 日移动到 1582 年 10 月 15 日)

 // Julian leap year calculation
 ((year % 4) == 0)

 // Gregorian leap year calculation
 ((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0) 

总结从公元 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);
}

现在从 1 年到 2000 年的所有年份都详尽地运行它会得到这个 pastebin:https://pastebin.com/bR7hwNr1

最有趣的部分表明闰年和跳日计算是正确的,并且也产生了结果:

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

现在的问题是:1.1.2001 是经过 730487 个日历日。鉴于公历定义的一年长度为 365.2425,我预计会看到 2000*365.2425 = 730485 天。如果使用tropical days 或太阳日,它将是 730484。但 740487 显然超出了范围。

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

这可能是一个历史问题,而不是我猜的编程问题。

【问题讨论】:

    标签: calendar date-conversion


    【解决方案1】:

    公历改革的目标是将北半球春分的日期重新设置为 3 月 21 日,并保持在那里。之所以选择这个日期,是因为这是公元 325 年尼西亚会议召开时的春分的大致平均日期。在会议召开时,春分的日期已经从公元 1 年的 3 月 25 日左右推迟了。

    有关所有详细信息,请阅读本书Gregorian Reform of the Calendar,该书是梵蒂冈天文台于 1983 年举行的一次会议的记录。

    澄清一下,在比较公历与儒略历时,使用儒略历和公历日期的混合会包含 10 天的一次性更正,其目的是更正从大约公元 325 年到公元 1582 年累积的多余闰年. 如果希望使用 AD 325 以外的某个开始日期,则整个计算应仅使用公历日期或儒略日期。

    【讨论】:

    • 感谢您的链接,这很有趣。 (Lilius 文章中的第 193 页,描述了在 1582 年取消 10 天的计划,因为它已经执行了。)不过,我并没有真正看到这回答了我的问题。
    • 不是在公元 1 月 1 日 0 小时开始计算,而是应该在公元 325 年左右开始计算;让我们使用 0 小时 1 January 325 具体来说,并且始终使用 0 小时。从 325 年 1 月 1 日到 2001 年 1 月 1 日,经过了 612,146 个日历日,这也是一个人通过计算实际的白天和黑夜将观察到的天数。使用公历中一天的平均长度 365.2425,有人估计 1676 年将包含 612146.43 天。使用截至 2000 年以平均秒为单位的热带年的平均长度,有人估计 1676 年包含 612146.43 天。没有异议。
    • 所以基本上我在公元 325 年之前增加了几天,其漂移没有通过改革得到补偿。这就是我获得额外天数的地方。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2020-06-18
    • 2021-11-24
    相关资源
    最近更新 更多