python 根据年月日,计算是这一年中的第几天
利用python计算某一天是这一年中的第几天,例如,给定年份= 2019年,月份= 1,日期= 3,则返回3;因为2019-01-03日期是2019年的第3 天。
首先,我们要知道闰年、平年怎么区分:
非整百年:能被4整除的为闰年。(如2004年就是闰年,2001年不是闰年);
整百年:能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)。
对于公元前和数值很大的年份,我们这里不做讨论。下面我们来写一下代码:
我按照功能把代码分成了几部分,首先定义几个会用到的常量:
month_of_days31 = [1, 3, 5, 7, 8, 10, 12]
month_of_days30 = [4, 6, 9, 11]
feb_month = 2
我们需要判断一下当前年份是不是闰年:
def is_leap_year(year):
"""
判断当前年份是不是闰年,年份公元后,且不是过大年份
:param year: 年份
:return: True 闰年, False 平年
"""
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
return False
然后,对年、月、日参数做一下参数校验
def validate_param(year, month, day):
"""
参数校验
:param year: 年份
:param month: 月份
:param day: 日期
:return: error_msg 错误信息,没有为空
"""
error_msg = u''
if not isinstance(year, int) or year < 1:
error_msg = u'年份输入不符合要求'
if not isinstance(month, int) or month < 1 or month > 12:
error_msg = u'月份输入不符合要求'
if not isinstance(day, int) or day < 1 \
or (month in month_of_days31 and day > 31) \
or (month in month_of_days30 and day > 30) \
or (month == feb_month and (day > 29 if is_leap_year(year) else day > 28)):
error_msg = u'日期输入不符合要求'
return error_msg
最后,对年、月、日进行计算:
def get_day_of_year(year, month, day):
"""
获取一个日期在这一年中的第几天
:param year: 年份
:param month: 月份
:param day: 日期
:return: 在这一年中的第几天
"""
# 参数校验
error_msg = validate_param(year, month, day)
if error_msg:
return error_msg if month == 1:
return day if month == 2:
return day + 31 days_of_31_num = 0
days_of_30_num = 0
# 31天月份数
for days_of_31 in month_of_days31:
if days_of_31 < month:
days_of_31_num += 1
else:
break # 30天月份数
for days_of_30 in month_of_days30:
if days_of_30 < month:
days_of_30_num += 1
else:
break return days_of_31_num * 31 + days_of_30_num * 30 + (29 if is_leap_year(year) else 28) + day
python 根据年月日,计算是这一年中的第几天的更多相关文章
- 使用python做科学计算
这里总结一个guide,主要针对刚开始做数据挖掘和数据分析的同学 说道统计分析工具你一定想到像excel,spss,sas,matlab以及R语言.R语言是这里面比较火的,它的强项是强大的绘图功能以及 ...
- 使用Python做科学计算初探
今天在搞定Django框架的blog搭建后,尝试一下python的科学计算能力. python的科学计算有三剑客:numpy,scipy,matplotlib. numpy负责数值计算,矩阵操作等: ...
- 使用Python做科学计算初探(转)
今天在搞定Django框架的blog搭建后,尝试一下python的科学计算能力. python的科学计算有三剑客:numpy,scipy,matplotlib. numpy负责数值计算,矩阵操作等: ...
- windows下如何快速优雅的使用python的科学计算库?
Python是一种强大的编程语言,其提供了很多用于科学计算的模块,常见的包括numpy.scipy.pandas和matplotlib.要利用Python进行科学计算,就需要一一安装所需的模块,而这些 ...
- Python之字符串计算(计算器)
Python之字符串计算(计算器) import re expression = '-1-2*((60+2*(-3-40.0+42425/5)*(9-2*5/3+357/553/3*99/4*2998 ...
- Python实现的计算马氏距离算法示例
Python实现的计算马氏距离算法示例 本文实例讲述了Python实现的计算马氏距离算法.分享给大家供大家参考,具体如下: 我给写成函数调用了 python实现马氏距离源代码: # encod ...
- 使用python装饰器计算函数运行时间的实例
使用python装饰器计算函数运行时间的实例 装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是 ...
- 《Python之BMI计算》
<Python之BMI计算> 前段时间写了个 BMI 因为刚刚开始学 有几个错误 第一个: 厘米我当时也没注意因为觉得去掉0.00的话后面1866666666是正确的BMI值 刚刚去看看去 ...
- 用Python进行实时计算——PyFlink快速入门
Flink 1.9.0及更高版本支持Python,也就是PyFlink. 在最新版本的Flink 1.10中,PyFlink支持Python用户定义的函数,使您能够在Table API和SQL中注册和 ...
- Gym 101206L Daylight Saving Time 根据年月日计算星期
题意: [3月的第二个周日02:00:00 , 3月的第二个周日03:00:00) 这个区间都不是PST或PDT,[11月的第一个周日01:00:00 , 11月的第一个周日02:00:00) 这个区 ...
随机推荐
- ThinkPHP5 核心类 Request 远程代码漏洞分析
ThinkPHP5 核心类 Request 远程代码漏洞分析 先说下xdebug+phpstorm审计环境搭建: php.ini添加如下配置,在phpinfo页面验证是否添加成功. [XDebug] ...
- 关于 MFRC522引脚功能图
MFRC522是属于13.56mhz芯片.另外SI522也是13.56mhz芯片,SI522 PIN对PIN完全兼容MFRC522,并且软硬件兼容,且引脚功能图都是一样的,功能方面比MFRC522多A ...
- ajax表单提交post(错误400) 序列化表单(post表单转换json(序列化))
序列化表单 使用serializeArray()序列化 转换成json格式 function arrayTOjson(node) { var b = "{"; for (var i ...
- snapkit equalto和multipliedby方法
最近在使用snapkit过程中遇到一个问题,在github上搜索之后发现另外一个有趣的问题 frameImageContainer.snp.makeConstraints({ (make) in ma ...
- Linux开机自启动脚本
将需要开机自启动的脚本命令写在文件/etc/rc.d/rc.local中即可. 比如需要开机自启动MySql和Apache,则在/etc/rc.d/rc.local文件尾部加入两行命令: system ...
- Linux入门基础(三):Linux用户及权限基础
用户基础 用户和组 每个用户都拥有一个userid 每个用户都属于一个主组,属于一个或多个附属组 每个组拥有一个groupid 每个进程以一个用户身份运行,受该用户可访问资源限制 每个可登陆用户拥有一 ...
- 从0开始学golang--1--部署本地服务器
部署自己的本地服务器. 找了个三方包项目:beego.看了下还不错. 上代码....: 首先直接安装三方包,CMD下:go get github.com/astaxie/beego 安装成功后会在pk ...
- 接口与协议学习笔记-AMBA片上通信协议_APB_AHB_AXI_AXI4不同版本(二)
随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的SoC设计中,片上总线设计是最 ...
- Android签名验证漏洞POC及验证
poc实际上就是一段漏洞利用代码,以下是最近炒得很火Android签名验证漏洞POC,来自https://gist.github.com/poliva/36b0795ab79ad6f14fd8 #!/ ...
- kali国内更新源
在/tec/apt/sources.list加入以下内容 #中科大更新源 deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free ...