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 os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
python读写json文件的简单实现
Apr 11 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
Python神奇的内置函数locals的实例讲解
Feb 22 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
python pandas 时间日期的处理实现
Jul 30 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
TFRecord格式存储数据与队列读取实例
Jan 21 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Python同时迭代多个序列的方法
Jul 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
详解python3中的真值测试
2018/08/13 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
python 构造三维全零数组的方法
2018/11/12 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
python实现简易淘宝购物
2019/11/22 Python
python处理写入数据代码讲解
2020/10/22 Python
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
大学生见习报告总结
2014/11/04 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript