|
楼主 |
发表于 2004-4-27 13:34:39
|
显示全部楼层
最初由 Dasn 发表
for (grep{$_%4==0 and $_%100!=0 or $_%400==0} 1900..2100 )
{
print "$_\n";
}
真的很简单:thank
最初由 devel 发表
搞不明白,闰年不是能整除四的一年吗?为什么还要400等数字呢?
- 一、
- 阳历闰年的算法:
- 现在通行的办法是每四年一闰,每逢百年免闰一次,而每逢四百年又恢复一闰。
- 地球环绕太阳一周需时:
- 365天5时48分46秒
-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
- 比365天多点儿,但不足366天,所以一年取整数365天(二月份28天);
- 这样每过4年,实际天数就会快接近一天(23时15分4秒),为了消除这种误差,
- 就把这一年的天数改为366天(二月份为29天),称做闰年!而只有365天的年份称为平年。
- 闰年增加了一天(24小时),比实际增加的时间:
- 5小时48分46秒 X 4 = 23时15分4秒
-  ̄ ̄ ̄ ̄ ̄ ̄
- 多了 24小时 - 23小时15分4秒 = 44分56秒
-  ̄ ̄ ̄ ̄
- 又产生误差,而我们现行的办法,为方便计,定为每一百年计算,如果每四年一闰,
- 则每百年有二十五闰,则因闰年的调整产生的误差累积为:
- 100年 / 4年 X 44分56秒 = 18小时43分20秒
-  ̄ ̄ ̄ ̄ ̄ ̄ ̄
- 已经快半天了,需要再作调整,把百年的闰年去掉,这就是逢百不闰的道理。
- 而因为4年一闰,每128年就会产生闰年累积误差近一天时间:
- 128年 / 4年 X 44分56秒 = 32 X 44分56秒 = 23小时57分52秒
-  ̄ ̄ ̄ ̄ ̄ ̄ ̄
- 每四百年之间,有3个128年,另加1个4年,实际闰年的总数为:
- 400年 / 4 - 3 = 97闰
-  ̄ ̄
- 而按现行方法,每百年24闰,则400年有96闰,正好比实际的少了一次,所以需要
- 再一次作调整,在400年这个百年恢复被取消的闰年,这就是逢400年恢复闰年的理由。
- 注:
- 习俗上历法与科学理论上有些差别的;导致现行历法上,夏至、冬至的日子常因年份
- 而提前或挪后一天(通常冬至为12月22日);
- 但理论上的规则不便记忆,所以不太可能实行;
- 二、
- 阴历闰年的由来:
- 因为月亮环绕地球一周的时间为:29.5306天,一年是365.2422天,平价一个年为:
- 365.2422 / 29.5306 = 12.37 个月
- 以12个月为一年,则剩下0.37个月,每2年或3年的累积后,出现了多一个
- 月的现象,称为成闰月;有闰月的年份称为闰年:
- 0.37 X 3 = 1.11
- 显然3年一闰已经有余数了,肯定有些是2年一闰的!
- :help闰月怎么算:
- 应该从何年开始?
- 0.37 X 2 = 0.74 > 0.5闰;
- 0.37 X 2 - 1 + 0.74 = 0.48不闰;再等一年:0.48 + 0.37 = 0.85 > 0.5闰;
- 三、
- 阴历月大月小是因为月球绕地球一周需时 29.5306 天,以29天为一个月显
- 小些,称做小月;以30天为一个月显得大些,称做大月:
- 29.5306 - 29 + 29.5306 = 30.0612
- :help怎么算:
- 从1年1月开始,一月大=30天,二月小=29天。。。
复制代码 |
|