首先要明白
地球绕太阳运行周期为365天5小时48分46秒(合365.24219天),即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,每四年累积约一天,把这一天加于2月末(2月29日),使当年的历年长度为366日,这一年就为闰年。 按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。所以规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。比如,1700年、1800年和1900年为平年,2000年为闰年。闰年的计算,归结起来就是通常说的:四年一闰;百年不闰,四百年再闰。
1、年份不是闰年的年份就是平年,
2、平年一年365天,阳历2月28天;闰年一年366天,阳历2月29天。
3、闰年能被4整除,平年不能。
简单判断
①一般的,能被4整除的年份是闰年,不能被4整除的年份是平年。
如:1988年2008年是闰年;2005年2006年2007年是平年。
②但是如果是世纪年(也就是整百年),就只有能被400整除才是闰年,否则就是平年。
如:2000年就是闰年,1900年就是平年。
③闰年的2月有29天,平年的2月只有28天
代码判断
代码判断某年是否是闰年的方法如下,从下面任一角度均可判断出闰平年:
角度1:能被 4 整除,且不能被 100 整除的年份是闰年(非世纪年)。如2020,2004
角度2:
能被 400 整除的年份一定是闰年(能被400整除肯定能被100整除,故该年为世纪年)。如1600,2000,2400,2800
角度3:
能被 100 整除(世纪年),且不能被 400 整除的年份为平年。如1900
角度2,3可以看成一种,只是判断条件反一下而已!
写法一:
角度1+角度2
import java.util.Scanner;
public class yearTest {
public static void main(String[] args) {
System.out.println("请输入年份:");
int year = new Scanner(System.in).nextInt();
if (year%4==0){ //角度1
//year%100==0说明是非世纪年 year%400!=0余数不为0表示不能被400整除
//角度2:能被 400 整除的年份一定是闰年(能被400整除肯定能被100整除,该年为世纪年;
//二者不可同时成立故用||“或”)。如1600,2000,2400,2800
if (year%100!=0 || year%400==0){
System.out.println(year%4+","+year%100+","+year%400);
System.out.println(year+"是闰年");
}else {
System.out.println(year%4+","+year%100+","+year%400);
System.out.println(year+"是平年");
}
}else {
System.out.println("是平年");
}
}
}
写法二:
角度1+角度3
import java.util.Scanner;
public class year {
public static void main(String[] args) {
System.out.println("请输入年份:");
int year = new Scanner(System.in).nextInt();
if (year%4==0){ //角度1
//year%100==0说明是世纪年 year%400!=0余数不为0表示不能被400整除
//角度3:能被 100 整除(世纪年),且不能被 400 整除的年份为平年。如1900
if (year%100==0 && year%400!=0){
System.out.println(year%4+","+year%100+","+year%400);
System.out.println(year+"是平年");
}else {
System.out.println(year%4+","+year%100+","+year%400);
System.out.println(year+"是闰年");
}
}else {
System.out.println("是平年");
}
}
}
写法三最简:
import java.util.Scanner;
public class yearTest2 {
public static void main(String[] args) {
System.out.println("请输入年份:");
int year = new Scanner(System.in).nextInt();
//角度1:year % 4 == 0 && year % 100 != 0
//角度2:year % 4 == 0 && year % 400 == 0 等同于 year % 400 == 0
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
System.out.println(year + "是闰年");
} else {
System.out.println(year + "是平年");
}
}
}
代码对比:
if (year%4==0){
//year%100==0说明是世纪年 year%400!=0余数不为0表示不能被400整除
if (year%100==0 && year%400!=0){
if (year%4==0){
//year%100==0说明是非世纪年 year%400==0余数为0表示能被400整除
if (year%100!=0 || year%400==0){
//角度1:year % 4 == 0 && year % 100 != 0
//角度2:year % 4 == 0 && year % 400 == 0 等同于 year % 400 == 0
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
总结:
满足下列二者情况之一的为闰年,反之为平年:
非世纪年 且 能被 4 整除为闰年。
能被 400 整除为闰年。(能被400整除肯定可以被100整除,故为世纪年)
朋友:
看到这里了,点个赞再走吧!