python 輸入日期,輸出n年前日期和n年後日期

2021-09-24 05:37:17 字數 1723 閱讀 3088

import datetime

# 定義函式:函式功能是輸入乙個年月日,輸出n年前和n年後的日期,精確到日,輸出為乙個元組,第乙個值是前n年,第二個值是後n年

def year_differ(year, n): # 輸入乙個datetime格式日期

year_str = str(year) # 將日期轉換成字串格式

year_str_year = int(year_str[0:4]) # 取出年,並轉換成整型

year_str_mon = int(year_str[5:7]) # 取出月,並轉換成整型

year_str_date = int(year_str[-2:]) # 取出日,並轉換成整型

# 輸入年份的前n年計算,需要區別輸入和輸出的年份是閏年還是平年

year_str_year_new_before = year_str_year - n

if year_str_mon == 2 and year_str_date == 29:

if year_str_year_new_before % 4 == 0:

before_year_str = str(year_str_year_new_before) + str(year_str_mon) + str(year_str_date)

else:

year_str_date_new = year_str_date - 1

before_year_str = str(year_str_year_new_before) + str(year_str_mon) + str(year_str_date_new)

else:

before_year_str = str(year_str_year_new_before) + str(year_str_mon) + str(year_str_date)

# 輸入年份的後n年計算,需要區別輸入和輸出的年份是閏年還是平年

year_str_year_new_after = year_str_year + n

if year_str_mon == 2 and year_str_date == 29:

if year_str_year_new_after % 4 == 0:

after_year_str = str(year_str_year_new_after) + str(year_str_mon) + str(year_str_date)

else:

year_str_date_new = year_str_date - 1

after_year_str = str(year_str_year_new_after) + str(year_str_mon) + str(year_str_date_new)

else:

after_year_str = str(year_str_year_new_after) + str(year_str_mon) + str(year_str_date)

# 前n年和後n年由字串格式轉換成datetime格式

before_year = datetime.datetime.strptime(before_year_str, '%y%m%d').date()

after_year = datetime.datetime.strptime(after_year_str, '%y%m%d').date()

# 輸出前n年和後n年的元組

return before_year,after_year

輸出n天後的日期

這個程式使我了解到構造外圍函式的好處,清晰明了,而且可以反覆使用,具有普適性 描述設計一程式,輸入乙個年月日 2010 10 28 輸出n天後的日期。輸入輸入4個整數,分別是年 月 日和n天 輸出輸出一行,為n後的日期,以yyyy mm dd的格式輸出 樣例輸入 2012 10 28 4 樣例輸出 ...

輸入今天日期輸出明天日期

輸入今天日期輸出明天日期 include int main else if day 31 month 12 31號內容結束 else if day 30 30號若為小月則進入下乙個月,否則加一天 else else if day 29 month 2 2月29號若為閏年則進入下乙個月 else if...

python的輸入與輸出 python輸入與輸出

python格式化輸出的方法 要使用 格式化字串字面值 請在字串的開始引號或三引號之前加上乙個 f 或 f 在此字串中,你可以在 字元之間寫可以引用的變數或字面值的 python 表示式。yes votes 42 572 654 no votes 43 132 495 percentage yes ...