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 内置函数complex详解
Oct 23 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
Python爬虫文件下载图文教程
Dec 23 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
python设计tcp数据包协议类的例子
Jul 23 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python3 元组tuple入门基础
Feb 09 Python
Python文件操作基础流程解析
Mar 19 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
Python eval函数原理及用法解析
Nov 14 Python
python 操作excel表格的方法
Dec 05 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
隐藏你的.php文件的实现方法
2007/03/19 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python contextlib模块使用示例
2015/02/18 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
对python中的logger模块全面讲解
2018/04/28 Python
Python中的元组介绍
2019/01/28 Python
简单的Python调度器Schedule详解
2019/08/30 Python
python反扒机制的5种解决方法
2021/02/06 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
入党积极分子自我鉴定范文
2014/03/25 职场文书
2014年行政部工作总结
2014/11/19 职场文书
2014年评职称工作总结
2014/11/20 职场文书
现货白银电话营销话术
2015/05/29 职场文书
学习党史心得体会2016
2016/01/23 职场文书
在Docker容器中部署SQL Server
2022/04/11 Servers