格里历(Gregorian calendar)

格里历是由意大利医生兼哲学家阿洛伊修斯·里利乌斯改革儒略历制定的历法,亦是一个被当今国际社会最广泛地使用的历法。由教宗额我略十三世于1582年颁行。公历是阳历的一种,于1912年在中国引进采用,因农历等中国传统历法是阴阳历,故公历在中文中又称阳历、西历、新历、公历。

格里历与儒略历一样,格里历也是每四年在2月底置一闰日,但格里历特别规定,除非能被400整除,所有的世纪年(能被100整除)都不设闰日;如此,每四百年,格里历仅有97个闰年,比儒略历减少3个闰年。

格里历的历年平均长度为365.2425日,接近平均回归年的365.242199074日,即每3300年误差一日,也更接近春分点回归年的365.24237日,即每8000年误差一日;而儒略历的历年为365.25日,每128年就误差一日。到1582年时,儒略历的春分日(3月21日)与地球公转到春分点的实际时间已相差10天,令到所算出的复活节日期与实际的春分的间隔逐渐增大,因此,格里历开始实行时,将儒略历1582年10月4日星期四的次日,为格里历1582年10月15日星期五,即有10天被删除,但原星期的周期保持不变。格里历的纪年沿用儒略历,当年定历以耶稣诞生年开始起算(但考证是公元前4年出生,但此记数法沿用至今),称为“公元”。

简单的说我们现在用的日历就是格里历。但是在格里历出现之前使用的是儒略历,而儒略历是单纯的大小月交替,所以 2月是有 31 号的。因为儒略历误差太大,所以后来使用了格里历进行替代。

格里历日期与儒略历日期的差距

根据上面的描述,格里历日期与儒略历日期是存在差距的,具体如下:

  • 1582年:
  • 格里历10月15日,相当于儒略历10月5日,之后的日期:格里历日期减10日等于儒略历日期。
  • 1583年-1699年:格里历日期减10日等于儒略历日期。
  • 1700年(格里历没有闰日,但儒略历有):
  • 2月28日,相当于儒略历2月18日,之前的日期:格里历日期减10日等于儒略历日期。
  • 格里历3月1日,相当于儒略历2月19日,之后的日期:格里历日期减11日等于儒略历日期。
  • 1701年-1799年:格里历日期减11日等于儒略历日期。
  • 1800年(格里历没有闰日,但儒略历有):
  • 格里历2月28日,合儒略历2月17日,之前的日期:格里历日期减11日等于儒略历日期。
  • 格里历3月1日,相当于儒略历2月18日,或之后的日期:格里历日期减12日等于儒略历日期。
  • 1801年-1899年:格里历日期减12日等于儒略历日期。
  • 1900年(格里历没有闰日,但儒略历有):
  • 格里历2月28日,合儒略历2月16日,之前的日期:格里历日期减12日等于儒略历日期。
  • 格里历3月1日,相当于儒略历2月17日,或之后的日期:格里历日期减13日等于儒略历日期。
  • 1901年-2099:格里历日期减13日等于儒略历日期。
  • 2100年(格里历没有闰日,但儒略历有):
  • 格里历2月28日,相当于儒略历2月15日,之前的日期:格里历日期减13日等于儒略历日期。
  • 格里历3月1日,合儒略历2月16日,或之后的日期:格里历日期减14日等于儒略历日期。
  • 外推格里历(Proleptic Gregorian calendar)

    在格里历是在1582年10月15日正式启用的,那如果我们想用格里历表示这时间之前的日期,那就是外推格里历了。

    和编程的关系

    前面说了这么多,和我们编程有什么关系呢?其实是有关系的,在 Java 中,java.util.GregorianCalendar 类就是支持儒略历(Julian calendar)和格里历(Gregorian calendar)的(参见 GregorianCalendar)。在格里历执行之前的日期,java.util.GregorianCalendar 类是使用儒略历表示的。

    而 JDK 8 引入的 java.time.chrono.IsoChronology 是基于外推格里历(Proleptic Gregorian calendar)实现的,是基于 ISO-8601 标准,是事实上的世界日历,参见(IsoChronology)。

    本文参考:
    儒略历:https://zh.wikipedia.org/wiki/%E5%84%92%E7%95%A5%E6%9B%86
    格里历:https://zh.wikipedia.org/wiki/%E6%A0%BC%E9%87%8C%E6%9B%86

    本博客文章除特别声明,全部都是原创!
    原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
    本文链接: 【程序员都应该了解的日历计法:儒略历、格里历和外推格里历】(https://www.iteblog.com/archives/9798.html)
    喜欢 (10)
    分享 (0)
    发表我的评论
    取消评论

    表情
    本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!