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 MD5文件生成码
Jan 12 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
Python3实现的简单三级菜单功能示例
Mar 12 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
Python logging模块handlers用法详解
Aug 14 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
python 如何对logging日志封装
Dec 02 Python
python运行脚本文件的三种方法实例
Jun 25 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 escape URL编码
2008/12/10 PHP
学习php笔记 字符串处理
2010/10/19 PHP
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
php常用数学函数汇总
2014/11/21 PHP
php pdo操作数据库示例
2017/03/10 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
跟老齐学Python之编写类之三子类
2014/10/11 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
一套软件测试笔试题
2014/07/25 面试题
财务会计实习报告体会
2013/12/20 职场文书
社团活动策划书范文
2014/01/09 职场文书
运动会获奖感言
2014/02/11 职场文书
正科级干部考察材料
2014/05/29 职场文书
公司委托书怎么写
2014/08/02 职场文书
学前教育专业求职信
2014/09/02 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
公司合并协议书范本
2014/09/30 职场文书
个人工作保证书
2015/02/28 职场文书
公司禁烟通知
2015/04/23 职场文书
2015最新民情日记范文
2015/06/26 职场文书
教师理论学习心得体会
2016/01/21 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书