如何判别闰年?

闰年的来历
 
关于公历闰年是这样规定的:地球绕太阳公转一周叫做一回归年,一回归年长365日5时48分46秒。因此,公历规定有平年和闰年,平年一年有365日,比回归年短0.2422日,四年共短0.9688日,故每四年增加一日,这一年有366日,就是闰年。但四年增加一日比四个回归年又多0.0312日,400年后将多3.12日,故在400年中少设3个闰年,也就是在400年中只设97个闰年,这样公历年的平均长度与回归年就相近似了。由此规定:年份是整百数的必须是400的倍数才是闰年,例如1900年、2100年就不是闰年。

中国旧历农历纪年中,有闰月的一年称为闰年。一般年份为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天。
        
  • 农历所谓“闰”的说法,只有闰年和闰月称谓,公历也有闰年的称谓。
        


    公历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日 闰二月大 壬戊年

下面是用Java实现的判断闰年的算法:

//LeapYear.java

public class LeapYear{
 public static void main( String args[] ){
  int year=2052; //method 1
  
  if( (year%4==0 && year%100!=0) || (year%400==0) )
   System.out.println(year+" is a leap year.");
  else
   System.out.println(year+" is not a leap year.");
  
  year=2052; //method 2
  boolean leap;
  if( year%4!=0 )
   leap=false;
  else if( year%100!=0 )
   leap=true;
  else if( year%400!=0 )
   leap=false;
  else
   leap=true;
   
  if( leap==true )
   System.out.println(year+" is a leap year.");
  else
   System.out.println(year+" is not a leap year.");
   
  year=2052; //method3
  if( year%4==0){
   if( year%100==0 ){
    if( year%400==0)
     leap=true;
    else
     leap=false;
   }else
    leap=true;
  }else
   leap=false;
  
  if( leap==true )
   System.out.println(year+" is a leap year.");
  else
   System.out.println(year+" is not a leap year.");
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值