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的类方法和静态方法
Dec 13 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Python中的字符串操作和编码Unicode详解
Jan 18 Python
python中模块查找的原理与方法详解
Aug 11 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
pytorch常见的Tensor类型详解
Jan 15 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 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中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
追悼会上的答谢词
2014/01/10 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
年终工作总结范文
2019/06/20 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
阿里云日志过滤器配置日志服务
2022/04/09 Servers
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL