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 相关文章推荐
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
python运行时间的几种方法
Jun 17 Python
python实现ID3决策树算法
Dec 20 Python
Python遍历numpy数组的实例
Apr 04 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
Python 占位符的使用方法详解
Jul 10 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python openCV实现摄像头获取人脸图片
Aug 20 Python
关于python类SortedList详解
Sep 04 Python
python 管理系统实现mysql交互的示例代码
Dec 06 Python
python中pycryto实现数据加密
Apr 29 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
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
javascript第一课
2007/02/27 Javascript
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
Python实现基于权重的随机数2种方法
2015/04/28 Python
Python3字符串学习教程
2015/08/20 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
黄金搭档广告词
2014/03/21 职场文书
消防安全责任书范本
2014/04/15 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
MySQL三种方式实现递归查询
2022/04/18 MySQL