實在受不了單雙周了,寫了個推算程序想往后推幾周就推幾周
例:
2020年10月19日——2020年10月25日:雙
2020年10月26日——2020年11月 1日:單
...
# @File : run.py
import datetime
def dayms(leapyear_):
days = dict()
lis = [1, 3, 5, 7, 8, 10, 12]
for i in lis: days[i] = 31
lis = [4, 6, 9, 11]
for i in lis: days[i] = 30
days[2] = 29 if leapyear_ else 28
# return sorted(days.items(), key=lambda x: x[0])
return days
def leapyear(year_):
if (year_ % 4) == 0:
if (year_ % 100) == 0:
if (year_ % 400) == 0:
return True # 整百年能被400整除的是閏年
else:
return False # 整百年不能被400整除的不是閏年
else:
return True # 非整百年能被4整除的為閏年
else:
return False # 不能被4整除不是閏年
def mr(year_, month_, yearDic_):
if 1 <= month_ <= 12:
pass
else:
year_ += 1 if month_ > 12 else -1
month_ = 1 if month_ > 12 else 12
# 如果傳值為13月(誤)。則應該是一月
# 如果傳值是0月,則只能由1月-1得到,為此應該是12月
yearDic_ = dayms(leapyear(year_))
# 從新計算是否是閏年
return year_, month_, yearDic_
def dr(year_, month_, day_, yearDic_):
if yearDic_[month_] < day_:
day_ -= yearDic_[month_]
year_, month_, yearDic_ = mr(year_, month_ + 1, yearDic_)
if day_ < 0:
year_, month_, yearDic_ = mr(year_, month_ - 1, yearDic_)
day_ += yearDic_[month_]
return year_, month_, day_, yearDic_
def ouy(yearDic_, year_, month_, day_, ds_, dayOfWeek):
k = int(input("往后推多少周:"))
year_, month_, day_, yearDic_ = dr(year_, month_, day_ - dayOfWeek, yearDic_)
for i in range(k):
year1, month1, day1, yearDic_ = \
dr(year_, month_, day_ + 1, yearDic_) # 下一周結束日
year_, month_, day_, yearDic_ = \
dr(year_, month_, day_ + 7, yearDic_) # 下一周起始日
print("{:4d}年{:2d}月{:2d}日——{:4d}年{:2d}月{:2d}日:{}" \
.format(year1, month1, day1, \
year_, month_, day_, \
ds_[i % 2]))
if __name__ == '__main__':
sl = input("以當前時間開始推算輸入y,自定義時間輸入s:")
s, dayOfWeek = 's', 0
if sl == 'y':
s = datetime.datetime.now().strftime('%Y-%m-%d') # 當前日期
elif sl == 's':
s = input("輸入日期(y-m-d):")
year, month, day = s.split('-') # 分割字符串提取日期
ntime = datetime.datetime(int(year), int(month), int(day)) # 當前時間
dayOfWeek = ntime.isoweekday()
yearDic = dayms(leapyear(int(year)))
ds = input("當前是單周還是雙周?(單和雙二選一):")
ds = ['單', '雙'] if ds == '單' else ['雙', '單']
ouy(yearDic, int(year), int(month), int(day), ds, dayOfWeek)
'''
示例1輸出:
以當前時間開始推算輸入y,自定義時間輸入s:s
輸入日期(y-m-d):2020-1-3
當前是單周還是雙周?(單和雙二選一):雙
往后推多少周:4
2019年12月30日——2020年 1月 5日:雙
2020年 1月 6日——2020年 1月12日:單
2020年 1月13日——2020年 1月19日:雙
2020年 1月20日——2020年 1月26日:單
示例2輸出:
以當前時間開始推算輸入y,自定義時間輸入s:y
當前是單周還是雙周?(單和雙二選一):雙
往后推多少周:4
2020年10月19日——2020年10月25日:雙
2020年10月26日——2020年11月 1日:單
2020年11月 2日——2020年11月 8日:雙
2020年11月 9日——2020年11月15日:單
'''