写在前面

在处理自然科学数据时,经常需要判断一个年份(这里说的年份都是公历)是否为闰年,本文首先简单介绍闰年的判断方法,然后提供了判断闰年的Matlab/Python函数。

什么是闰年

因为一回归年(平太阳连续两次通过春分点的时间间隔)并不正好是365天,因此产生了平年和闰年。判断公历闰年的方法如下:

闰年计算方法
(按一回归年365天5小时48分45.5秒)
1.普通年份能被4整除,且不能被100整除的,是闰年。(如2004年就是闰年)
2.世纪年份能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
3.对于数值很大的年份,这年如果能被3200整除,并且还能被172800整除的才是闰年。如172800年是闰年,86400年不是闰年(因为虽然能整除3200,但不能整除172800)。(此按一回归年365天5h48’45.5’'计算

链接: 闰年-百度百科.

判断闰年方法如下图所示:

普通年
大数年
公历闰年
能被 4 整除且不能被 100 整除 或者 能被 400 整除
能被3200整除 且 能被172800整除

因为我们在处理自然科学的数据时,遇到的一般都是正常的年份,因此暂且不考虑大数年,此时判断闰年的Matlab代码如下:

% Judge leap year

year = 2100;

if (mod(year,4) == 0) && mod(year,100)~=0) || (rem(year,400) == 0
    disp([num2str(year),'是闰年']);
else
    disp([num2str(year),'不是闰年']);
end

mod(x,y)和rem(x,y)都是取余运算,当x和y的正负号一样的时候,两个函数结果是相同的。

判断闰年的Matlab函数

将判断方法封装进一个函数,需要判断时直接调用即可。

  • Tips将此代码另存为isleapyear.m放在当前脚本的同级目录下,直接使用isleapyear(year)即可判断year是否是闰年,闰年返回1,非闰年返回0,结合if使用更方便。
% whether a year is a leap year

function lyear = isleapyear(ye)

if (mod(ye,4) == 0) && mod(ye,100)~=0) || (mod(ye,400) == 0
    lyear=1;
else
    lyear=0;
end
end

判断闰年的Python函数

类似的也可以写出判断闰年的Python函数,只是语法不同。

# whether a year is a leap year

def isleapyear(ye):
    if (ye % 4 == 0 and ye % 100 !=0) or ye % 400 == 0:
        lyear = 1
    else:
        lyear = 0
    return lyear


# test this function
if isleapyear(2021):
    print('是闰年')
else:
    print('不是闰年')

参考

链接: 闰年-百度百科.
[1]:https://baike.baidu.com/item/闰年/27098

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐