利用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

最新文章

  1. 【python】发送post请求
  2. poj3237
  3. JSON 基础解释.
  4. Sensor(GYROSCOPE)
  5. webstorm 配置node babel编译es6
  6. iphone4s丢失如何找回
  7. head tail 命令
  8. css3之border-color
  9. Windows Azure 网站 (WAWS) 和中间证书
  10. PS大头照的背景
  11. HDU2037今年暑假不AC(贪心)
  12. PHP Markdown 解析器Parsedown
  13. JVM学习九:JVM之GC算法和种类
  14. Python_网页爬虫
  15. Linux新手随手笔记1.1
  16. Java框架之spring框架的优点,为什么要学习spring框架
  17. Maven项目集成Jetty
  18. C# FTP操作报550错误
  19. java如何快速创建List
  20. [UE4]判断2个向量是否相等

热门文章

  1. Day9 JSP
  2. JSP九大内置对象和四大作用域和Servlet的三大作用域对象
  3. zookeeper 集群安装与配置
  4. zabbix 从入门到精通
  5. CentOS6中OpenMP的运行时间或运行性能分析
  6. ORP计
  7. 【js】走近小程序(2) 常见问题总结
  8. SparkSQL与Hive的整合
  9. springboot快速入门(五)——事务管理
  10. 【python】logging日志模块写入中文编码错误解决办法