细恐至微,那些与闰年有关的bug
什么是闰年
公历闰年判定遵循的规律为:四年一闰、百年不闰、400年再闰。
中国旧历农历每月的天数依照月亏而定,一年的时间以12个月为基准,平年比一回归年少约11天。为了合上地球围绕太阳运行周期即回归年,每隔2到4年,增加一个月,增加的这个月为闰月。那么闰年应该怎么计算?
闰年的计算方法:
1、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年)
2、世纪年能被400整除的是闰年。(如2000年是闰年)
3、对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年。如172800年是闰年,86400年不是闰年(因为虽然能整除3200,但不能整除172800)(此按一回归年365天5h48’45.5’'计算)。
那么用算法来实现就是:
public static bool IsLeap(int yN){if ((yN % 400 == 0 && yN % 3200 != || (yN % 4 == 0 && yN % 100 != || (yN % 3200 == 0 && yN % 172800 == 0))return true;elsereturn false;}
细恐至微,居然有这样一个bug
1880年到2020年中是闰年的有以下这些年份:
1880年、1884年、1888年、1892年、1896年、1904年、1908年、1912年、1916年、1920年、1924年、1928年、1932年、1936年、1940年、1944年、1948年、1952年、1956年、1960年、1964年、1968年、1972年、1976年、1980年、1984年、1988年、1992年、1996年、2000年、2004年、2008年、2012年、2016年、2020年。
于是我打开我的iphone手机看了一下1990年的日历
1990在并不是闰年,2月份居然有29天
1900年有2月29日!看完后我整个感觉都不好了,开始怀疑人生。那一天的人们在干嘛?
据说有人看到这里,赶快看看自己的android手机(ps:确实没毛病)
抽了根烟,情不自禁的我打开了熟悉的windows电脑,心里默念了一句"微软大法好’。
熟悉的微软终于没有让我失望
常见的认知错误
- 一年总是365天
- 2月总是28天
- 闰年时每四年一次
这些bug与闰年有关:
1、在一个日期值上加或减时间的代码。尤其是加减1年或1个月的代码
2、各种根据数据库查询结果生成的报表和图标,月度和年度统计可能会少算1天
3、证书/密码/密钥/缓存 等的过期时间,可能会比预期的早了一天,或者可能设定了一个非法的过期时间
4、固定长度的数组。例如,一个长度为365的数组遇到闰年可能就不够了,可能会数组越界。
5、UI组件,例如日历、日期选择组件,以及客户端输入校验相关的代码。
闰秒?
除了闰年,还有一个东西叫闰秒。
“闰秒”就是1分钟有61秒, “跳秒”都安排在6月30日,或是12月31日的最后一瞬间。
详情参考:
https://en.wikipedia.org/wiki/Leap_second
参考资料
https://discussions.apple.com/thread/5982489?tstart=0
https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year
https://blog.csdn.net/weixin_39860915/article/details/103917840
https://en.wikipedia.org/wiki/Leap_second
作者信息:
【文章信息】:作者-张林:原文链接-https://blog.csdn.net/kebi007/article/details/103959512
【原创公众号】:dotNet全栈开发。文章目录
版权声明:本文为CSDN博主「dotNet全栈开发」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
细恐至微,那些与闰年有关的bug相关推荐
- 那些和闰年相关的 Bug
2020年是一个闰年(Leap Year),闰年是会出故障的. 常见的错误认知 1. 一年总是365天 2.2月总是28天 3.闰年是每四年一次 其实,闰年并不是每四年一次.2000是闰年,但1900 ...
- 国产自主研发编程语言火了,同行十二年,不知Python是木兰?
1月17号有媒体称,一款面向智能物联网和编程教育的号称自主研发语言横空出世,名为[Mulan ].消息一出,引起了众多争议.但有知乎网友发现,下载的程序包解包后--是个 Python? 何为木兰? 1 ...
- 2019(dotNet全栈开发)公众号回顾
2019年已经过去,人口红利已经逐渐消失,也许这是这10年互联网史上最糟糕的一年,也可能这是未来10年互联网史上最好的一年 关于公众号,我其实很早就开始注册了,只是一直没怎么运营(ps:不知道怎么推广 ...
- 2019我的公众号回顾
2019年已经过去,人口红利已经逐渐消失,也许这是这10年互联网史上最糟糕的一年,也可能这是未来10年互联网史上最好的一年 关于公众号,我其实很早就开始注册了,只是一直没怎么运营(ps:不知道怎么推广 ...
- 公司终于决定放弃微服务传统设计模式,全面拥抱 DDD!
前段时间,参加了一场闭门技术交流会,讨论的热点是微服务,话题集中在微服务架构拆分到底应该拆多细. 有微服务的地方就有 DDD(领域驱动设计),不过即便是专业的技术交流会,也没人能给 DDD 的价值下个 ...
- springcloud 微服务鉴权_我对微服务、SpringCloud、k8s、Istio的一些杂想
一.微服务与SOA "微服务"是一个名词,没有这个名词之前也有"微服务",一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微 ...
- 再见了微服务!全面拥抱 DDD 思想真正的价值!
前段时间,参加了一场闭门技术交流会,讨论的热点是微服务,话题集中在微服务架构拆分到底应该拆多细. 有微服务的地方就有 DDD(领域驱动设计),不过即便是专业的技术交流会,也没人能给 DDD 的价值下个 ...
- 再见了微服务,DDD已成气候!
前段时间,参加了一场闭门技术交流会,讨论的热点是微服务,话题集中在微服务架构拆分到底应该拆多细. 有微服务的地方就有 DDD(领域驱动设计),不过即便是专业的技术交流会,也没人能给 DDD 的价值下个 ...
- 再见了微服务!全面拥抱 DDD 真正的价值
前段时间,参加了一场闭门技术交流会,讨论的热点是微服务,话题集中在微服务架构拆分到底应该拆多细. 有微服务的地方就有 DDD(领域驱动设计),不过即便是专业的技术交流会,也没人能给 DDD 的价值下个 ...
- 再见了微服务!DDD 已成气候!
前段时间,参加了一场闭门技术交流会,讨论的热点是微服务,话题集中在微服务架构拆分到底应该拆多细. 有微服务的地方就有 DDD(领域驱动设计),不过即便是专业的技术交流会,也没人能给 DDD 的价值下个 ...
最新文章
- 为分支机构和移动人员实施路由的导图
- 以python入门教程新世界-50⾏python爬⾍代码, 带你正确打开知乎新世界!
- rand(),repmat(),logical()函数的使用
- 2020年, SGG论文汇总
- jenkins通过Execute shell中通过scp/ssh命令,将一台机器中项目远程拷贝到另外一台机器,修改文件中内容
- 比特币市值目前是白银68%
- HDU - 4422 The Little Girl who Picks Mushrooms
- 重置PL/SQL Developer工具栏布局
- 【百战GAN】适合所有人的第一个GAN项目:DCGAN图像生成代码实战
- 随机运算HTML5代码,js随机数学加法计算答题代码
- 微信公众号迁移,认证; 名称触发商标怎么办
- 九宫格一条线连起来_9个圆圈用4条线连起来-九个点用四条线连接-数学-霍甲心同学...
- LPR历史数据汇总(持续更新)
- 终于有人把3D打印讲明白了
- 用条码标签打印软件批量打印物料标签
- css3宽度变大动画_H5 直播的疯狂点赞动画是如何实现的?
- B站投资心动,内容渠道两手都要抓,两手都能“硬”吗?
- 小白入门网络安全,需要学习哪些内容?
- SRPG游戏开发(五十二)第十一章 地图动作与地图事件 - 一 初始化地图动作(Initialize Map Action)
- 2022年化工自动化控制仪表考试题及在线模拟考试