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学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
python中input()与raw_input()的区别分析
Feb 27 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
Apr 18 Python
Python自动抢红包教程详解
Jun 11 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
Python求均值,方差,标准差的实例
Jun 29 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Python configparser模块常用方法解析
May 22 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 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
mysql+php分页类(已测)
2008/03/31 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
写给小白看的JavaScript异步
2017/11/29 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
Python函数嵌套实例
2014/09/23 Python
Python编程求质数实例代码
2018/01/31 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
NumPy统计函数的实现方法
2020/01/21 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
网络研修随笔感言
2015/11/18 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技