import time import traceback def findLen(str): counter = 0 while str[counter:]: counter += 1 return counter def is_valid_date(str_date): '''判斷是否是一個有效的日期字符串''' try: time.strptime(str_date, "%Y%m%d") return True except Exception: # traceback.print_exc() raise Exception("時間參數錯誤 near : {}".format(str_date)) #print("20180101是星期一,作為參考日期") #jisuan_riqi = input("請輸入你要計算的日期(20180101):") year=eval(input("請輸入年:")) month=eval(input("請輸入月:")) day=eval(input("請輸入日:")) jisuan_riqi=str(year)+str(month)+str(day) jisuan=str(year)+'/'+str(month)+'/'+str(day) if(is_valid_date(jisuan_riqi)): #平年每月天數 month_list1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] #閏年每月天數 month_list2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 輸入的年份大於等於2018年 if year >= 2018: year_days = 0 for i in range(2018, year): # 先做出一個判斷,判斷年份是否是閏年 if (i % 4 == 0 & (i % 100 != 0)) | (i % 400 == 0): year_days += 366#閏年 else: year_days += 365#平年 month_days = 0 day_days=0 if ((year % 4 == 0) & (year % 100 != 0)) | (year % 400 == 0): for j in range(month - 1): month_days += month_list2[j] else: for j in range(month - 1): month_days += month_list1[j] total_days = year_days + month_days + day # 相差天數與7取余,+1表明余數為0是周一 xingqi = (total_days - 1) % 7 + 1 print("你輸入的日期 %s" % jisuan_riqi, "是周", xingqi) # 輸入的年份小於2018年 else: # 計算2018年之前的日期時,先將2018的一天作為初始,加入到總天數中 year_days = 1 for i in range(2017, year, -1): # 先做出一個判斷,判斷年份是否是閏年,在對其進行天數的計算 if (i % 4 == 0 & (i % 100 != 0)) | (i % 400 == 0): year_days += 366 else: year_days += 365 month_days = 0 if (year % 4 == 0 & (year % 100 != 0)) | (year % 400 == 0): for j in range(11, month - 2, -1): month_days += month_list2[j] else: for j in range(11, month - 1, -1): month_days += month_list1[j] total_days = year_days + month_days - day if (total_days) % 7 == 0: xingqi = (total_days) % 7 + 1 else: # 余數為1是周7,余數為2是周6,所以8-余數 xingqi = 8 - (total_days) % 7 print("你輸入的日期 %s" % jisuan_riqi, "是周", xingqi)