Python计算指定日期是今年的第几天(三种方法)


Posted in Python onMarch 26, 2020

今天早上和腾讯面试官进行了视频面试,由于音量和网络以及我的垃圾电脑的原因,个人感觉黄了...

最后面试官给了我一道简单的计算题:指定日期是今年的第几年

由于电脑卡到打字都打不动,我勉勉强强写了一点,虽然面试官知道了我的想法也了解我的设备情况,最后没让我写完

但是心里惭愧还是时候补齐了...话不多说回到主题吧

首先是输入的问题,个人认为分别输入年月份是一件很初级的要求,就实现了形如“2020-3-26”的字符串解析的两种方法,代码如下:

def cal_date_str_spilt(date):
 ''''
 处理形如"2020-3-26"
 使用字符串的spilt方法解析
 '''
 _year = int(date.split('-')[0])
 _month = int(date.split('-')[1])
 _day = int(date.split('-')[2])
 return [_year, _month, _day]

def cal_date_str_time(date):
 '''
 使用time库内置函数strptime(string, format) return struct_time对象
 传入参数:字符串 + 处理格式
 '''
 _date = time.strptime(date, '%Y-%m-%d')
 _year = _date.tm_year
 _month = _date.tm_mon
 _day = _date.tm_mday
 return [_year, _month, _day]

然后判断是否闰年

def judge_leap_year(year, month):
 # 只有闰年且月份大于2月才加多一天
 if year % 400 == 0 or year % 100 and year % 4 == 0 and month > 2:
  return 1
 else:
  return 0

主函数

def main():
 date = input("请输入日期,以'-'分隔:")
 sum_1, sum_2 = 0, 0
 date_list_1 = cal_date_str_spilt(date)
 date_list_2 = cal_date_str_time(date)

 month_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 month_day_lep = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

 sum_1 += sum(month_day[:date_list_1[1] - 1]) + date_list_1[2] + judge_leap_year(date_list_1[0], date_list_1[1])
 sum_2 += sum(month_day[:date_list_2[1] - 1]) + date_list_2[2] + judge_leap_year(date_list_2[0], date_list_2[1])
 print('今天是今年的第' + str(sum_1) + '天')
 print('今天是今年的第' + str(sum_2) + '天')
 
 '''
 这一段是使用了datetime库的方法,python本身就有处理该类问题的方法
 '''
 _sum = datetime.date(date_list_1[0], date_list_1[1], date_list_1[2])
 sum_3 = _sum.strftime('%j')
 if sum_3[0] == '0' and sum_3[1] == '0':
  print('今天是今年的第' + str(sum_3[-1:]) + '天')
 elif sum_3[0] == '0':
  print('今天是今年的第' + str(sum_3[-2:]) + '天')
 else:
  print('今天是今年的第' + str(sum_3) + '天')

if __name__ == '__main__':
 main()

以下是全部代码:

import datetime
import time

def cal_date_str_spilt(date):
 ''''
 处理形如"2020-3-26"
 使用字符串的spilt方法解析
 '''
 _year = int(date.split('-')[0])
 _month = int(date.split('-')[1])
 _day = int(date.split('-')[2])
 return [_year, _month, _day]

def cal_date_str_time(date):
 '''
 使用time库内置函数strptime(string, format) return struct_time对象
 传入参数:字符串 + 处理格式
 '''
 _date = time.strptime(date, '%Y-%m-%d')
 _year = _date.tm_year
 _month = _date.tm_mon
 _day = _date.tm_mday
 return [_year, _month, _day]

def judge_leap_year(year, month):
 # 只有闰年且月份大于2月才加多一天
 if year % 400 == 0 or year % 100 and year % 4 == 0 and month > 2:
  return 1
 else:
  return 0

def main():
 date = input("请输入日期,以'-'分隔:")
 sum_1, sum_2 = 0, 0
 date_list_1 = cal_date_str_spilt(date)
 date_list_2 = cal_date_str_time(date)

 month_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 month_day_lep = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

 sum_1 += sum(month_day[:date_list_1[1] - 1]) + date_list_1[2] + judge_leap_year(date_list_1[0], date_list_1[1])
 sum_2 += sum(month_day[:date_list_2[1] - 1]) + date_list_2[2] + judge_leap_year(date_list_2[0], date_list_2[1])
 print('今天是今年的第' + str(sum_1) + '天')
 print('今天是今年的第' + str(sum_2) + '天')

 '''
 这一段是使用了datetime库的方法,python本身就有处理该类问题的方法
 '''
 _sum = datetime.date(date_list_1[0], date_list_1[1], date_list_1[2])
 sum_3 = _sum.strftime('%j')
 if sum_3[0] == '0' and sum_3[1] == '0':
  print('今天是今年的第' + str(sum_3[-1:]) + '天')
 elif sum_3[0] == '0':
  print('今天是今年的第' + str(sum_3[-2:]) + '天')
 else:
  print('今天是今年的第' + str(sum_3) + '天')

if __name__ == '__main__':
 main()

总结

到此这篇关于Python三种方法计算指定日期是今年的第几天的文章就介绍到这了,更多相关python计算指定日期是今年第几天内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python的判断语句模拟三目运算
Apr 24 Python
Python中使用strip()方法删除字符串中空格的教程
May 20 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
Python中装饰器高级用法详解
Dec 25 Python
python实现自主查询实时天气
Jun 22 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
给你一面国旗 教你用python画中国国旗
Sep 24 Python
Django框架models使用group by详解
Mar 11 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
使用tensorflow进行音乐类型的分类
Aug 14 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 Python
Python函数默认参数常见问题及解决方案
Mar 26 #Python
Python内建序列通用操作6种实现方法
Mar 26 #Python
PyQt5 界面显示无响应的实现
Mar 26 #Python
Python基于class()实现面向对象原理详解
Mar 26 #Python
Python文件读写w+和r+区别解析
Mar 26 #Python
Python装饰器实现方法及应用场景详解
Mar 26 #Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 #Python
You might like
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
php引用传值实例详解学习
2013/11/06 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
python爬虫基础之urllib的使用
2020/12/31 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
Linux文件系统类型
2012/02/15 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
年度考核自我评价
2014/01/25 职场文书
南京青奥会口号
2014/06/12 职场文书
大学生工作自荐书
2014/06/16 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
公司员工培训管理制度
2015/08/04 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript