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内置的字符串处理函数整理
Jan 29 Python
Python入门篇之列表和元组
Oct 17 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
python中import与from方法总结(推荐)
Mar 21 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
django API 中接口的互相调用实例
Apr 01 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python遍历路径破解表单的示例
Nov 21 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
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
security.js实现的RSA加密功能示例
2018/06/06 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
python实现词法分析器
2019/01/31 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python logging添加filter教程
2019/12/24 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
主管竞聘书范文
2014/03/31 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
群众路线领导对照材料
2014/08/23 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
浅谈MySQL中的六种日志
2022/03/23 MySQL
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL