Python計(jì)算指定日期是今年的第幾天(三種方法)
今天早上和騰訊面試官進(jìn)行了視頻面試,由于音量和網(wǎng)絡(luò)以及我的垃圾電腦的原因,個(gè)人感覺黃了...
最后面試官給了我一道簡(jiǎn)單的計(jì)算題:指定日期是今年的第幾年
由于電腦卡到打字都打不動(dòng),我勉勉強(qiáng)強(qiáng)寫了一點(diǎn),雖然面試官知道了我的想法也了解我的設(shè)備情況,最后沒讓我寫完
但是心里慚愧還是時(shí)候補(bǔ)齊了...話不多說回到主題吧
首先是輸入的問題,個(gè)人認(rèn)為分別輸入年月份是一件很初級(jí)的要求,就實(shí)現(xiàn)了形如“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庫內(nèi)置函數(shù)strptime(string, format) return struct_time對(duì)象 傳入?yún)?shù):字符串 + 處理格式 ''' _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
主函數(shù)
def main(): date = input("請(qǐng)輸入日期,以'-'分隔:") 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庫內(nèi)置函數(shù)strptime(string, format) return struct_time對(duì)象 傳入?yún)?shù):字符串 + 處理格式 ''' _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("請(qǐng)輸入日期,以'-'分隔:") 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()
總結(jié)
到此這篇關(guān)于Python三種方法計(jì)算指定日期是今年的第幾天的文章就介紹到這了,更多相關(guān)python計(jì)算指定日期是今年第幾天內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python自定義函數(shù)計(jì)算給定日期是該年第幾天的方法示例
- Python 3.3實(shí)現(xiàn)計(jì)算兩個(gè)日期間隔秒數(shù)/天數(shù)的方法示例
- Python日期時(shí)間模塊datetime詳解與Python 日期時(shí)間的比較,計(jì)算實(shí)例代碼
- Python根據(jù)指定日期計(jì)算后n天,前n天是哪一天的方法
- python 計(jì)算兩個(gè)日期相差多少個(gè)月實(shí)例代碼
- Python中的DateTime和TimeDelta詳解
- Python中Timedelta轉(zhuǎn)換為Int或Float方式
- 如何使用?Python?Timedelta?月份計(jì)算日期
相關(guān)文章
Python導(dǎo)包模塊報(bào)錯(cuò)的問題解決
這篇文章主要介紹了Python導(dǎo)包模塊報(bào)錯(cuò)的問題解決,文章圍繞主題相關(guān)內(nèi)容詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03pandas實(shí)現(xiàn)滑動(dòng)窗口的示例代碼
本文主要介紹了pandas實(shí)現(xiàn)滑動(dòng)窗口的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03python獲取指定時(shí)間差的時(shí)間實(shí)例詳解
這篇文章主要介紹了python獲取指定時(shí)間差的時(shí)間實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04在Linux命令行終端中使用python的簡(jiǎn)單方法(推薦)
下面小編就為大家?guī)硪黄贚inux命令行終端中使用python的簡(jiǎn)單方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01pycharm中如何自定義設(shè)置通過“ctrl+滾輪”進(jìn)行放大和縮小實(shí)現(xiàn)方法
這篇文章主要介紹了pycharm中如何自定義設(shè)置通過“ctrl+滾輪”進(jìn)行放大和縮小實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Python學(xué)習(xí)之12個(gè)常用基礎(chǔ)語法詳解
這篇文章主要為大家介紹了12個(gè)Python小案例,包含了日常開發(fā)中非常實(shí)用的語法,快來跟隨小編一起學(xué)習(xí)一下,看看自己都會(huì)多少個(gè)呢2022-02-02Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接
這篇文章主要給大家介紹了Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05