判断单双周java_单双周计算

该博客介绍了一个用Java编写的程序,用于根据输入日期推算单双周。程序能够处理闰年,用户可以指定开始日期和周类型,并向前推进任意周数,输出新的单双周日期范围。

实在受不了单双周了,写了个推算程序想往后推几周就推几周

例:

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日:单

'''

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值