Julian 记日法是由法国学者 Joseph Justus Scaliger (1540-1609)发明的, 名称可能是取自 Scaliger 的父亲, 意大利学者Julius Caesar Scaliger (1484-1558)。 天文学家已经用 Julian 周期为自 4713 BC 一月一日以来的每一天赋予了一个唯一的数字。 这就是所谓的 Julian 记日法(JD)。 JD 0 指定为 4713 BC 一月一日正午 UTC 到 4713 BC 一月二日正午 UTC 的 24 小时。 “Julian 日历(julian Day)” 与“Julian 记日(Julian Date)”不同。 Julian 日历是 Julius Caesar 在 45 BC 发明的。一直用到大约 1582 年, 这时各国开始使用罗马历法。在 Julian 日历里面, 一年是近似 365 1/4 天 = 365.25 天。 这样大约每 128 年就有一天的误差。 不断积累的历法错误促使教皇 Gregory XIII 按照与弥撒议会 ( Council of Trent)一致的精神改革了历法。 在罗马历法里,一年是近似 365 + 97 / 400 天 = 365.2425 天。 因此对应于罗马历法,大约要 3300 年,才会积累一天的误差。 近似的 365+97/400 是通过利用下面的规则, 规定每 400 年有 97 个闰年实现的: 
每个可被 4 整除的年是一个闰年。  
不过,可被 100 整除的年不是闰年。  
但是,可以被 400 整除的年还是闰年。  
因此,1700,1800,1900,2100 和 2200 年都不是闰年。而1600,2000,和 2400年是闰年。 相比而言,旧式的 Julian 历法里面只有能被 4 整除的年是闰年。 1582 二月,罗马教廷要求从 1582 年十月减去十天, 因此1852 年十月四日后面紧跟着就是十五日。 在意大利,波兰,葡萄牙 和西班牙都这样处理了。 其他天主教国家也很快跟着这么做了,但是新教国家不愿意修改, 而且希腊等东正教国家直到本世纪初才修改。 这个改革在英国及其殖民地(包括现在的 USA)在 1752年执行了。 这样 1752 年九月二日后面跟着 1752 年九月十四日。 这就是为什么 Unix 系统的cal生成下面的输出: 

解决方案 »

  1.   

    % cal 9 1752
       September 1752
     S  M Tu  W Th  F  S
           1  2 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
       
    注意: SQL92 声称 “在日期时间字面datetime literal的定义上, 日期时间(datetime)值 中的日期和时间根据罗马历法受自然法则的约束 ”。 在 1752-09-03 和 1752-09-13 之间的日子, 尽管被罗马教廷的教令取消了,但为了和 “自然法则”相一致,因而是有效的日期。 在世界的不同的地方,发明了许多不同的历法,有许多比罗马历法系统还早。 例如,中国历法的最早应用可以追溯到公元前14世纪。 传说黄帝在 2637 BC 就发明了这个历法。 中华人民共和国使用罗马历法用于民用。中国历法用于决定节日/节气。 
      

  2.   

    to zfluo(haha):
       谢谢你的回答!祝新年进步!
      

  3.   

    在这一行中返回的值是什么意思?
    int jul = (int) (java.lang.Math.floor(365.25 * jy) + java.lang.Math.floor(30.6001*jm) + day + 1720995.0);
      

  4.   

    为什么这一行要加个常数?int jul = (int) (java.lang.Math.floor(365.25 * jy) + java.lang.Math.floor(30.6001*jm) + day + 1720995.0);1720995。0???