当前位置: 首页 > news >正文

python计算闰年

这里说明一下:看到网上很多写python计算闰年的,有很多是不同。

有份省级期刊万年历计算公元1-10000年的闰年
算法如下:4000年停闰一次。区别其他算法,有些是3200年停闰一次。

def division(dividend, divisor) -> bool:""":param dividend: 被除数:param divisor: 除数:return: bool"""if not isinstance(dividend, int):raise NotIntegerError(f"被除数不是整数,dividend:{dividend}")if not isinstance(divisor, int):raise NotIntegerError(f"除数不是整数,divisor:{divisor}")if divisor == 0:raise DivisorZeroError(f"除数不能为0,divisor:{divisor}")return dividend % divisor == 0def is_leap_year(year):"""功能:计算是否为闰年:return:"""leap = Falseif division(year, 4000):return Falseelif division(year,400):return Trueelif division(year,4) and not division(year,100):return Trueelse:return False

之前看到问答上回答是也是思路正确的:

  • 我只是说根据现在的规则是没法判断一个大于3200年以上的年份是否是闰年。
  • 为什么呢,地球围绕太阳的公转周期大概是365天5时48分46秒,写成小数形式是365.2422天。
  • 写成小数点是因为人类闰是闰一天,所以单位统一比较好算,就不用小时分秒了。
  • 所有闰法都是为了使日历的周期和绕太阳公转的周期对应得上,误差不超过一天(不超过闰一天的校正范围。)在没有闰四年的规则下,每年会有0.2422天的误差,累积五年就超过1,所以会四年闰一次。
  • 但是1-0.2422*4=0.0312,这种闰法校正过头,又会引入新的误差,每4年累积0.0312天。
  • 大概累积1/0.0312*4=128.205128205年后又会达到最大校正范围。但是128这个数字显然不好记,所以就取100,每100年停闰一次就能缩小误差。
  • 但是新误差又来了,停闰一年缩小误差同时,又引入新误差,这个误差是1-100/4*0.0312=0.22。也- 就是说每100年会累积0.22天。累积500年误差就会>1,所以400年的时候不能停闰了,必须重新闰起来。
  • 解决了每百年累积的误差,400年重闰又带来新误差,这个误差是1-0.224=0.12。按照这个算法那么当1/0.12400=3333.333333333年这个误差就会达到1。所以我们又必须停闰,3200年必须停闰。故3200年是平年,但是按照现在的规则3200年是闰年。

本质是回归年的问题

  • 一种就是按照4000年停闰
  • 一种是按照3200年停闰

本质都在弥补误差。
实际是更精确的是:
格里历(现行公历)的历年平均长度为365.2425日,接近平均回归年的365.242199074日,即约每3300年误差一日,也更接近春分点回归年的365.24237日。

http://www.lryc.cn/news/90659.html

相关文章:

  • 聊聊如何使用Js写一个简单的二级联动和三级联动呢?
  • IPv4 和 IPv6 的特点、区别以及在互联网中的应用
  • JavaScript处理移动web交互
  • 4年测试经验,一问三不知,过于离谱...
  • Java 与查找算法(2)二分查找
  • Java程序设计入门教程--原始类与包装类
  • pip安装python库速度慢、失败及超时报错解决办法
  • 向量数据库
  • leetcode 11.盛最多水的容器
  • 都说00后已经躺平了,但是有一说一,该卷的还是卷啊。
  • 牛客网刷题学习SQL(二)
  • 深蓝学院 C++笔记 先导篇章 - 绪论
  • R7-19 天梯赛团队总分
  • 使用 Kotlin 的 Opt-in (选择加入)功能注解API提示当前非稳定API
  • webpack配置排除打包
  • HNU-操作系统OS-ucoreLab系列-感悟
  • MySQL运维篇(三)
  • Lecture 2 Text Preprocessing
  • web练习第二周
  • LC-1439. 有序矩阵中的第 k 个最小数组和(二分答案、多路归并)
  • 一文1000字从0到1实现Jenkins+Allure+Pytest的持续集成
  • 给一个有序数组生成平衡搜索二叉树(java)
  • 【JavaSE】Java基础语法(二十二):包装类
  • javascript基础十八:说说你对JavaScript中事件循环的理解​
  • 详解js中的浅拷贝与深拷贝
  • Day9 敏捷测试——敏捷开发的特征、什么是敏捷测试?、极限编程、极限测试
  • k8s 维护node与驱逐pod
  • SouapUI接口测试之创建性能测试
  • springboot整合kafka入门
  • Rust 笔记:Rust 语言中的字符串