共找到3條詞條名為閏年的結果 展開

閏年

曆法中的閏年

閏年(Leap Year)是為了彌補因人為曆法規定造成的年度天數與地球實際公轉周期的時間差而設立的。補上時間差的年份為閏年。閏年包括在公曆(格里曆)或夏曆中有閏日或閏月的年份。閏年有366天。

簡介


閏年
閏年
閏年(leap year),在公曆(格里曆)或夏曆中有閏日的年份,以及在中國舊曆農曆中有閏月的年份。地球繞太陽運行周期為365天5小時48分46秒(合365.24219天)即一回歸年(tropical year)。公曆的平年只有365日,比回歸年短約0.2422 日,所餘下的時間約為四年累計一天,於第四年加於2月,使當年的歷年長度為366日,這一年就為閏年。

產生原因


 閏年
閏年
地球繞太陽一圈需要:365天5小時48分46秒,因為365天5小時48分46秒=365天6小時,為了方便,平年365天,所以為了補時間的差異,每隔4年有閏年,閏年366天,閏年的2月29天。
在公曆(格里曆)紀年中,有閏日的年份叫閏年,一般年份365天,閏年為366天。由於地球繞太陽運行周期為365天5小時48分46秒(合365.24219天)即一回歸年,公曆把一年定為365天。所餘下的時間約為四年累計一天,加在二月里,所以平常年份每年365天,二月為28天,閏年為366天,二月為29天。因此,每400年中有97個閏年,閏年在2月末增加一天,閏年366天。
中國舊曆農曆紀年中,有閏月的一年稱為閏年。一般年份為12個月,354或355天,閏年則為13個月,383或384天。農曆作為陰陽曆的一種,每月的天數依照月虧而定,一年的時間以12個月為基準;為了合上地球圍繞太陽運行周期即回歸年,每隔2到4年,增加一個月,增加的這個月為閏月,因此農曆的閏年為13個月。
農曆沒有第十三月的稱謂,閏月按照曆法規則,排放在從二月到十月的過後重複同一個月,重複的這個月為閏月,如四月過後的閏月稱為閏四月。
農曆閏年閏月的推算,3年一閏,5年二閏,19年七閏;農曆基本上19年為一周期對應於公曆同一時間。如公曆的2001年5月27日、1982年5月27日和1963年5月27日這個日子,都是閏四月初五。
閏月加到哪個月,以農曆曆法規則推斷,主要依照與農曆的二十四節氣相符合來確定;農曆的閏月天數與正常月份天數一樣,為29或30天。農曆所謂“閏”的說法,只有閏年和閏月稱謂,公曆也有閏年的稱謂。

基本解釋


凡陽曆中有閏日(2月29日)的年份,閏余(歲余置閏。陰曆每年與回歸年相比所差的時日)。
1582年以來的置閏規則:
普通閏年:公曆年份是4的倍數,且不是100的倍數的,為閏年(如2004年、2020年等就是閏年)。
世紀閏年:公曆年份是整百數的,必須是400的倍數才是閏年(如1900年不是閏年,2000年是閏年)。
1582年以前的慣例:四年一閏;如果公元A年的A(正數)能被4整除,那麼它就是閏年;如果公元前B年的B(正數)除以4餘1,那麼它也是閏年。

出處


宋·蘇軾《監洞霄宮俞康直郎中所居四詠 退圃》:“園中草木春無數,只有黃楊厄閏年。”
宋·陸遊《蝸舍》詩:“麥因多雨損,蠶遇閏年遲。”
清·俞樾《茶香室叢鈔·茨菰應閏月》:“茨菰一根,環十二子,閏年十三子。”

雙閏年


通常情況下,每4年會出現一次陽曆閏年,每19年會有7次農曆閏年,兩個閏年一旦重合,就是雙閏年了。

判定方法


公曆閏年計算
(按一回歸年365天5小時48分45.5秒)
1、非整百年份:能被4整除的是閏年。(如2004年就是閏年,2001年不是閏年)
2、整百年份:能被400整除的是閏年。(如2000年是閏年,1900年不是閏年)
3、對於數值很大的年份:如果這一年能被3200整除,那麼這一年不是閏年,但如果這一年能被172800整除,則為閏年。如172800年是閏年,86400年不是閏年(因為雖然能被3200整除,但不能被172800整除)。(此按一回歸年365天5h48'45.5''計算)
按一回歸年365天5h48'45.5''計算:3200年多出16000小時153600分145600秒=18600小時26分40秒,現行公曆中每400年有97個閏年,3200年共97*8=776個閏年=776*24小時 =18624小時>18600小時,所以只能算到775個閏年,3200不是閏年,於是775*24=18600,多出了26分40秒(共計1600秒),怎麼辦?需要經歷多少個3200年的周期,足夠彌補1天(86400秒)?答案是剛好54個周期(86400=1600*54),歷時172800(=3200*54)年。
公元前閏年計算
根據閏年演演算法,公元4年是閏年,且周期是4年,如果公元有0年,即為閏年。因為公元沒有0年,那麼公元前1年就是閏年。
1、非整百年份:年數除以4,餘數為1的年份是閏年。(如公元前1年、前5年、前9年是閏年)
2、整百年份:年數除以400,餘數為1的年份是閏年。(如公元前401年、前801年是閏年)
3、對於數值很大的年份:年數除以3200,餘數為1,那麼這一年不是閏年;年數除以172800,餘數為1,則為閏年。(如公元前172801年是閏年,前864001年不是閏年)
128年31閏置閏法
這一規則曾在19世紀提出,但不知何種原因,沒被兩教派採納。比起400年3不閏和900年7不閏的規則,128年31閏更精確、更簡便。
按現行的閏年規則,從2052年到2096年間的閏年與回歸年的誤差都會超過一天以上,如採用128年31閏規則,就不會這麼早出現這種情況。
128年31閏的置閏方案的優點和實施方法:
1、採用128年31閏的置閏的方法,可以大大減少歷年與回歸年的誤差,回歸年的長度是365.24219879天,128年31閏的平均年長是365.2421875天。歷年與回歸年的平均誤差每年不到一秒,是曆法與回歸年平均誤差的1/27。
2、改歷后與現曆法銜接好,不需要過渡階段。其方法如下:現曆法繼續使用,到2048年停閏,以後每128年不閏。新曆法規則是:每四年一閏,凡公元年數能被128整除的年不閏。
3、此曆法非常科學,它的置閏方法比現曆法更簡單,更符合天體的運行規律,現曆法平均每年與回歸年誤差26秒,而此曆法每年與回歸年平均誤差不到一秒。經計算,如果回歸年按如今的長度計算,得八萬多年,新曆法與回歸年的誤差才超過一天。而現曆法與回歸年的誤差3300年就超過一天。此曆法好記、簡單,便於計算,凡公元年數能被128整除的年就不閏。
閏年的計算
2017年,經過研究,閏年的計算應該如下:
口訣1:4年1閏,400年97閏,3200年(97*8-1)閏,86400年(27*(97*8-1)+1)閏(20926閏)
口訣2:4年1閏,128年31閏,86400年(675*31+1)閏(20926閏)
*************************************
一個回歸年,H=(365*24*3600+5*3600+48*60+46)秒=31556926秒=15778463*2秒
1天 D=86400秒=43200*2秒
一個回歸年=H/D天=15778463*2/(43200*2)天=365.2421990740740740740740740740....天
4年一閏:365*4+1=1461天=15778800/10800天
4個回歸年為(15778463/43200)*4=15778463/10800天
4年一閏,公曆比回歸年時間多337/10800天
增加百年不閏、400年再閏的規則后:
400個公曆年天數為365*400+97=146097天=15778476/108天
400個回歸年為(15778463/43200)*400=15778463/108天
公曆比回歸年時間多13/108天
增加3200年不閏的規則后:
3200個公曆年天數為365*3200+97*(3200/400)-1=1168775天=31556925/27天
3200個回歸年為15778463*3200/43200=15778463*32/432=31556926/27天
公曆比回歸年時間少1/27天
增加86400年再閏的規則后:
86400個公曆年天數為365*86400+(97*8-1)*(86400/3200)+1=365*86400+775*27+1=31556926=852037002/27天
86400個回歸年為15778463*86400/43200=15778463*864/432=15778463*54/27=852037002/27天
公曆比回歸年時間少0天
增加128年不閏的規則后:
128個公曆年天數為365*128+128/4-1=46751天=31556925/675天
128個回歸年為(15778463/43200)*128=15778463*2/675天=31556926/675天
公曆比回歸年時間少1/675天
增加86400年再閏的規則后:
86400個公曆年天數為365*86400+31*675+1=31556926天
86400個回歸年為15778463*86400/43200=15778463*2=31556926天
公曆比回歸年時間少0天
結論:一天定義為24小時(86400秒),需要86400年一個循環才能消除公曆和回歸年的時間差。
口訣:4年1閏,128年不閏,86400年再閏。

分類介紹


閏年包括在公曆(格里曆)或夏曆中有閏日的年份,和在中國農曆中有閏月的年份。

公曆閏年

閏年計算流程圖
閏年計算流程圖
地球繞日運行周期為365天5小時48分46秒(合365.24219天),即一回歸年(tropical year)。公曆的平年只有365日,比回歸年短約0.2422 日,每四年累積約一天,把這一天加於2月末(即2月29日),使當年時間長度變為366日,這一年就為閏年。
現在的公曆是根據羅馬人的“儒略曆”改編而得。由於當時沒有了解到每年要多算出0.0078天的問題,從公元前46年,到16世紀,一共累計多出了10天。為此,當時的教皇格雷果里十三世,將1582年10月5日人為規定為10月15日。並開始了新閏年規定。即規定公曆年份是整百數的,必須是400的倍數才是閏年,不是400的倍數的就是平年。此後,平均每年長度為365.2425天,約4年出現1天的偏差。按照每四年一個閏年計算,平均每年就要多算出0.0078天,經過四百年就會多出大約3天來,因此,每四百年中要減少三個閏年。閏年的計算,歸結起來就是通常說的:四年一閏;百年不閏,四百年再閏。
由於地球的自轉速度逐漸降低,而公轉速度則相對更加穩定,所以上述的系統經過更長的周期也會發生微小的誤差。據計算,每8000年會有一天的誤差,所以英國的天文學家John Herschel提議公元4000為平年,以後類推12000年,20000年亦為平年。但此提議從未被正式採納。原因是到了4000年,地球自轉的精確速度並非現在可以預測,所以屆時參照真實數據方可做出判斷。因此,在長遠的將來,針對閏年的微小調整應該不是由預定的系統決定,而是隨時不定性的。

西方公曆閏年

陽曆中有閏日的年份叫閏年,相反就是平年,平年為365天,閏年為366天。在公曆(格里曆)紀年中,平年的二月為28天,閏年的二月為29天。閏年平月2月29日為閏日。

中國農曆閏年

中國舊曆農曆作為陰陽曆的一種,每月的天數依照月虧而定,一年的時間以12個月為基準,平年比一回歸年少約11天。為了合上地球圍繞太陽運行周期即回歸年,每隔2到4年,增加一個月,增加的這個月為閏月。閏月加到哪個月,以農曆曆法規則推斷,主要依照與農曆的二十四節氣相符合來確定。在加有閏月的那一年有13個月,歷年長度為384或385日,這一年也稱為閏年。如1984年鼠年的農曆中,有兩個十月,通常成為前十月和后十月(即閏月)。

公曆與農曆


公曆1982年至2042年與農曆閏年閏月對照表
1982年5月23日閏四月小壬戊年
1984年11月23日閏十月大甲子年
1987年7月26日閏六月大丁卯年
1990年6月23日閏五月大庚午年
1993年4月22日閏三月大癸酉年
1995年9月25日閏八月大乙亥年
1998年6月24日閏五月小戊寅年
2001年5月23日閏四月大辛巳年
2004年3月21日閏二月大甲申年
2006年8月24日閏七月大丙戊年
2009年6月23日閏五月大己丑年
2012年5月21日閏四月小壬辰年
2014年10月24日閏九月小甲午年
2017年7月23日閏六月大丁酉年
2020年5月23日閏四月小庚子年
2023年3月22日閏二月大癸卯年
2025年7月25日閏六月大己巳年
2028年6月23日閏五月大戊申年
2031年4月22日閏三月大辛亥年
2033年8月25日閏七月大癸丑年
2036年7月23日閏六月小丙辰年
2039年6月22日閏五月大己未年
2042年3月22日閏二月大壬戊年

超長農曆年


最長的農曆閏年的天數可達385天,這樣的農曆閏年是很罕見的。從公元前221年至公元1900年的2120年裡,一共只有9次。從公元1900年至公元4000年這2100年裡出現了22次,出現的年份有:
1925年、1944年、2006年、2270年、2289年、2351年、2606年、2625年、2634年、2889年、2951年、2970年、3234年、3253年、3296年、3315年、3589年、3608年、3872年、3915年、3934年、3953年。

計算方法


程序計算

WPS表格
=OR(AND(MOD(YEAR(單元格),4)=0,MOD(YEAR(單元格),100)<>0),MOD(YEAR(單元格),400)=0)
Excel表格
假設某單元格輸入公曆年份,如輸入“1582”表示1582年,輸入“2000”表示2000年,輸入負數表示“公元前(相反數)年”,如輸入“-222”表示公元前222年。
可以用如下公式計算給定年份的天數:
=IF(單元格=1582,355,IF(單元格<0,IF(MOD(單元格,4)=3,366,365),IF(單元格<1582,IF(MOD(單元格,4)=0,366,365),365+IF(MOD(單元格,4)=0,1,0)-IF(MOD(單元格,400)=0,0,1)+IF(MOD(單元格,100)=0,0,1))))
知道了給定年份的天數,自然就知道是不是閏年了。
比如說在單元格A1輸入年份,公式就變成:
=IF(A1=1582,355,IF(A1<0,IF(MOD(A1,4)=3,366,365),IF(A1<1582,IF(MOD(A1,4)=0,366,365),365+IF(MOD(A1,4)=0,1,0)-IF(MOD(A1,400)=0,0,1)+IF(MOD(A1,100)=0,0,1))))
現實中一般碰到的年份,自然是無交集地晚於1582年的年份,這時給定年份的天數可以用這個公式:
=365+IF(MOD(單元格,4)=0,1,0)-IF(MOD(單元格,400)=0,0,1)+IF(MOD(單元格,100)=0,0,1)
Ecmascript語言
1
2
3
4
5
6
7
// 判斷指定年份是否為閏年
function isleap(){
var the_year = new Date().getFullYear();
var isleap = (the_year % 4 == 0 && the_year % 100 !=0) || (the_year % 400 ==0 && year % 3200 != 0) || year % 172800 == 0;
return isleap;
}
C#語言
1
2
3
4
5
6
7
8
9
10
/// 
/// 判斷指定年份是否為閏年
/// 
/// 年份
/// 返回布爾值true為閏年,反之不是
public static bool isLeapYear(int year)
{
return ((year % 4 == 0 && year % 100 != 0) || (year%400==0 && year % 3200 != 0) || year % 172800 == 0);
 
}
Java語言
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Scanner;
public class LeapYear {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("請輸入年份:");
int year = input.nextInt();
if((year % 4 == 0 && year % 100 != 0) || (year%400==0 && year % 3200 != 0) || year % 172800 == 0)
System.out.print(year + "年是閏年。");
else 
System.out.print(year + "年不是閏年。");
}
}
VB語言
1
2
3
4
5
6
7
8
9
Private Sub Command1_Click()
Dim a As Integer
a = InputBox("請輸入待判斷年份")
If (a Mod 4 = 0 And a Mod 100 <> 0) Or (a Mod 400 = 0 And a Mod 3200 <> 0) Or (a Mod 172800 = 0) Then
MsgBox "是閏年!"
Else
MsgBox "不是閏年!"
End If
End Sub
Python 語言
1
2
3
4
5
6
7
8
# -*- coding: cp936 -*-
temp = input("輸入年份:")
YEAR = int(temp)
if (YEAR % 4 == 0 and YEAR % 100 != 0) or (YEAR % 400 == 0 and YEAR % 3200 != 0) or year % 172800 == 0
:
print ("閏年")
else:
print ("非閏年")
C++語言
1
2
3
4
5
6
7
8
9
10
11
#include
int main()
{
int year;
std::cout<<"請輸入年份:";
std::cin>>year; //輸入待判斷年份,如2008
std::cout<
)
) == 1 ? "年是閏年" : "年是平年")<
return 0;
}
scheme語言
1
2
3
4
5
6
7
8
9
10
11
(define (閏年? 年份)
(define (整除? x y)
(= 0 (mod x y)))
(cond ((or 
(and (整除? 年份 4)
(not (整除? 年份 100)))
(and (整除? 年份 400)
(not (整除? 年份 3200)))
(整除? 年份 172800))
#t)
(else #f)))
C語言
1
2
3
4
5
6
7
8
9
10
11
12
#include 
int main(void)
{
int y;
printf("請輸入年份,回車結束\n");
scanf("%d",&y);
if((y%4==0&&y%100!=0)||(y%400==0&&y%3200!=0)||y%172800==0)
printf("%d是閏年\n",y);
else
printf("%d是平年\n",y);
return 0;
}
MATLAB語言
1
2
3
4
5
6
function lpflag = isleapyear(year)
% 判斷是否為閏年
% Input -year 年份,數值
% Output -lpflag lpflag = 1,閏年;lpflag = 0,平年
lpflag = (~mod(year, 4) && mod(year, 100)) || (~mod(year, 400) && mod(year, 3200)) || ~mod(year, 172800)
;
Erlang語言
1
2
3
4
5
6
7
8
9
-module(year).
-export([isLeap/1]).
isLeap(Year) ->
if Year rem 3200 /= 0 and Year rem 400 == 0 -> true;
Year rem 100 /= 0 and Year rem 4 == 0 -> true;
Year rem 172800 == 0 ->true;
true ->
false
end.
Bash/Shell
1
2
3
4
5
6
7
8
year=$1
if [ "$(( $year % 4 ))" == "0" ] && [ "$(( $year % 100 ))" != "0" ] || [ "$(( $year % 400 ))" == "0" ] && [ "$(( $year % 3200 ))" != "0" ] || [ "$(( $year % 172800 ))" == "0" ] 
 
then
echo "leap year"
else
echo "common year"
fi
易語言
1
2
3
4
5
.局部變數 年份, 整數型
' 是否是閏年
.如果真 ((年份 % 4 = 0 且 年份 % 100 ≠ 0) 或 (年份 % 400 = 0 且 年份 % 3200 ≠ 0) 或 年份 % 172800 = 0
)
信息框 (“是閏年!”, 0, , )
Go語言
1
2
3
4
5
6
7
8
// IsLeapYear 檢查傳入的年份是否是閏年
func IsLeapYear(year int) bool {
if (year%4 == 0 && year%100 != 0) || (year%400 == 0 && year%3200 != 0) || year%172800 == 0
 {
return true
}
return false
}
JavaScript語言
1
2
3
4
5
6
function isLeapYear(year){
 if((year/4==Math.floor(year/4)&&year/100!=Math.floor(year/100))||(year/400==Math.floor(year/400)&&year/3200!=Math.floor(year/3200))||year/172800==Math.floor(year/172800)){
return true
 }
 return false
}

精確計算方法

(按一回歸年365天5小時48分45.5秒)
①、普通年能被4整除且不能被100整除的為閏年。(如2004年就是閏年,1901年不是閏年)
②、世紀年能被400整除的是閏年。(如2000年是閏年,1900年不是閏年)
③、對於數值很大的年份,這年如果能整除3200,並且能整除172800則是閏年。如172800年是閏年,86400年不是閏年(因為雖然能整除3200,但不能整除172800)(此按一回歸年365天5h48'45.5''計算)。
此外,如依照現有太陽年的長度與上述閏年規則,每8000年又約差一日,因此約翰·赫歇爾提議每逢4000的倍數不閏,如西元4000年。但距此一年份來臨尚有約二千年之遙,因此還未曾真正納入規則或實施過。又由於地球公轉速率的不穩定與眾多影響因素,屆時是否需要納入此規則仍有疑問。
原因:若一年按365天5h48'46''(此時86400年也是閏年)計算,一年日數必須是整數,不便將零時數計入,所以取365天為一年,則餘5時48分46秒,積至4年約滿一 日,所以4年一“閏日”,謂之“閏年”,無“閏日”之年為平年,即平年365天,閏年366天。但到4年之時,僅有23時15分4秒閏一日,欠缺44分56秒;積至100年(25閏)時就欠缺18時43分20秒,約合3 / 4日,所以滿100年不閏;此時又餘5時16分40秒,積至400年餘21時6分40秒又閏;又欠缺2時53分20秒,積至3200年計欠缺23時6分40秒,所以滿3200年不閏;此時又餘53分20秒,積至86400年剛好24 時又一閏,這是不余不欠,需重計算,所以按陽曆計算就有上面的閏年規則。
按一回歸年365天5h48'45.5''計算:3200年多出16000小時153600分145600秒 =18600小時26分40秒,共32*24+8=136個閏年=776*24=18624小時 >18600小時,所以只能算到775個閏年,3200不是閏年,於是775*24=18600,多出了26分40秒怎麼辦需要多少個周期彌補?答案是54個周期,為172800年,因為172800/3200=54個周期 54*26分40秒=1404分2160秒=24小時。
祖沖之改革
在古代,我國曆法家一向把十九年定為計算閏年的單位,稱為“一章”,在每一章里有七個閏年。也就是說,在十九個年頭中,要有七個年頭是十三個月。這種閏法一直採用了一千多年,不過它還不夠周密、精確。公元412年,北涼趙厞創作《元始歷》,才打破了歲章的限制,規定在六百年中間插入二百二十一個閏月。可惜趙厞的改革沒有引起當時人的注意,例如著名歷算家何承天在公元443年製作《元嘉歷》時,還是採用十九年七閏的古法。祖沖之吸取了趙厞的先進理論,加上他自己的觀察,認為十九年七閏的閏數過多,每二百年就要差一天,而趙厞六百年二百二十一閏的閏數卻又嫌稍稀,也不十分精密。因此,他提出了三百九十一年內一百四十四閏的新閏法,這個閏法在當時算是最精密的了。除了改革閏法以外,祖沖之在曆法研究上的另一重大成就,是破天荒第一次應用了“歲差”。”祖沖之在曆法研究方面的第三個巨大貢獻,就是能夠求出曆法中通常稱為“交點月”的日數。祖沖之根據上述的研究成果,終於成功製成了當時最科學、最進步的曆法——《大明曆》。這是祖沖之科學研究的天才結晶,也是他在天文曆法上最卓越的貢獻。