2020年的开年,新型冠状病毒来得猝不及防,大家过了一个与以往不同的新年。
小N这段时间宅在家,除了吃饭就是睡觉,这日子过得都不知道是星期几了。翻了翻日历,才知道今天是2020年2月12号星期二。说起来,今年还是闰年呢!想必有很多同学已经把小学数学课本上的闰年知识忘了吧?小N今天就抓到了一个忘记闰年规则的同事小E!
小N:你知道什么是闰年吗?
小E:我知道我知道!闰年每四年一次,能被4整除的就是闰年,比如2020年!
小N:那1900年是闰年吗?
小E:1900年当然是闰年了!小N你的数学咋回事儿呀?
小N:才不是呢!我给你展示一下闰年的编程条件吧!
不知道大家有没有听过这样一句俗话
“四年一闰,百年不闰,四百年再闰。”
意思是:
不是整百的年份只要被4整除的就是闰年,
整百的年份必须得被400整除。
那为什么会有闰年呢?
小N在度娘搜索了一下:
这么看来
闰年、闰月的存在
感觉就像是不精确历法的补丁
程序员能忍到今天也是不容易呀!
提到闰年
有一种bug叫做
闰年虫(leap year bug)
接下来进入小N科普时间
第一种:没有设置闰年 将2月都默认为只有28天,
那么当碰到闰年时,
2月29日便会误作3月1日处理。
(2月29生日的朋友落泪:
每四年才有一次的生日都不让人过了)
第二种:闰年规则出错
小N举两个例子来给大家说明这种情况~
①微软Zune音乐播放机
在2008年12月31日误以为闰年只有365天而进入实际上还未到的2009年1月1日,结果导致全球大当机。现在百度Zune贴吧还有用户开玩笑调侃微软四年一度的闰月bug。
小N在网上找到了Zune内置日期的更新驱动里的一段代码,大家可以分析思考一下~
while (days > 365) { if (IsLeapYear(year)) { if (days > 366) { days -= 366; year += 1; } } else { days -= 365; year += 1; } }
②PS3游戏机
PS3误将“四年一闰”当作“两年一闰”,在2010年3月1日错误当作不存在的2010年2月29日。导致全球PS3在当天都出现了无法使用的状况,被玩家在论坛疯狂吐槽。不过吐槽完bug,还是会大喊“索尼大法好!”
第三种:1900年问题
举个最典型的例子好了,excel就默认1900年是闰年,如果你输入日期格式的1900年2月28日,再往下拉自动填充,就会出现不存在的1900年2月29日。
小N温馨提醒:
虽然闰年问题看似一段简单的代码就可以解决
但如果出错却会引发大问题
在家远程办公的程序员一定要小心注意啦!
代码里可别出现闰年虫~
附上两种常见语言的闰年代码供大家参考~
① WPS表格:
=OR(AND(MOD(YEAR(单元格),4)=0,MOD(YEAR(单元格),100)<>0),MOD(YEAR(单元格),400)=0)
② Java
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 + "年不是闰年。"); }}
③ Python
# -*- 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 ("非闰年")
结语
时值新型冠状病毒爆发
社会各界纷纷出力抗击病毒
程序员也不例外
这几天
GitHubTrending TOP榜上
出现了一个开源项目
名叫 Wuhan2020
用于收集经过审核与确认过的
武汉新型冠状病毒防疫相关信息
现在已经有5.6k的Star了
短短几天内已经有100+个PR被合进项目中
在这次疫情数据分析中
Python发挥了重要作用
比如:
用Python抓取疫情实时动态数据
画疫情地图
模拟预测肺炎数据等等
如果你被困在家中做不了什么
不如趁此机会来NEXT学院
跟着腾讯一线大咖学习Python
尽管这个闰年的开头不太顺利
但是我们的众志成城抗击病毒
爱和希望总是比病毒蔓延得更快
隔离病毒
不会隔离爱
我们的心始终在一起
春天总是在闰月来临
春天到了,离疫情结束也就不远了
武汉的亲人们
等到春暖花开的时候
我们一起去看樱花吧
在看点一下