python 给年周期 找准确的时间(本周一,下一周一)

import numpy
import datetime
srtime1=input("年份和周数")#格式202223
srtime=int(srtime1)
year_1= int(srtime / 100)
day_2=int(int(srtime %100)*7)#一年几天
def gettime(year_1,day_2):
    fir_day = datetime.datetime(year_1,1,1)
    zone = datetime.timedelta(days=day_2-1)
    return datetime.datetime.strftime(fir_day + zone, "%Y-%m-%d")
x=gettime(year_1,day_2)
x=x.replace("-"," ")
str=x
a1=str[0:4]
a2=str[5:7]
a3=str[8:10]
year=int(a1)
month=int(a2)
day=int(a3)

def createCalendar(year, month):
    fmday = 0
    mday = 0
    firstD = 0
    dateday = []
    if month == 1:
        someday = datetime.datetime((year - 1), 12, 1)
        firstDay = someday.isoweekday()
        firstD = firstDay;
        for i in range(firstDay):
            dateday.append(" ")
        for i in range(1, 32):
            dateday.append(i)
        for i in range(1, 32):
            dateday.append(i)
        if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
            for i in range(1, 30):
                dateday.append(i)
        else:
            for i in range(1, 29):
                dateday.append(i)
    elif month == 12:
        someday = datetime.datetime(year, 11, 1)
        firstDay = someday.isoweekday()
        firstD = firstDay;
        for i in range(1, 31):
            dateday.append(i)
        for i in range(1, 32):
            dateday.append(i)
        for i in range(1, 32):
            dateday.append(i)
    else:
        someday = datetime.datetime(year, (month - 1), 1)
        firstDay = someday.isoweekday()
        firstD = firstDay;
        for i in range(firstDay):
            dateday.append(" ")
        for j in range((month - 1), (month + 2)):
            if ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0) and j == 2:
                for i in range(1, 30):
                    dateday.append(i)
            elif j in [1, 3, 5, 7, 8, 10, 12]:
                for i in range(1, 32):
                    dateday.append(i)
            elif j == 2:
                for i in range(1, 29):
                    dateday.append(i)
            elif j in [4, 6, 9, 11]:
                for i in range(1, 31):
                    dateday.append(i)

    if month in [1, 12, 8]:
        fmday = 31
        mday = 31
    elif month == 3 and ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0):
        fmday = 29
        mday = 31
    elif month == 3:
        fmday = 28
        mday = 31
    elif month in [4, 6, 9, 11]:
        fmday = 31
        mday = 30
    elif month in [5, 7, 10]:
        fmday = 30
        mday = 31
    elif month == 2 and ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0):
        fmday = 31
        mday = 29
    elif month == 2:
        fmday = 31
        mday = 28

    return dateday, fmday, mday, firstD - 1


dateday, fmday, mday, firstD = createCalendar(year, month)
todayindex = dateday.index(day, (fmday + firstD), (fmday + mday + firstD) + 1)
today = datetime.datetime(year, month, day)
firstday = today.isoweekday();

lmonth = month
lyear = year
if firstday == 1:
    mo =day
    lmo = dateday[todayindex + 7]
   
elif firstday == 2:
    mo = dateday[todayindex - 1]

    lmo = dateday[todayindex + 6]
    
elif firstday == 3:
    mo = dateday[todayindex - 2]

    lmo = dateday[todayindex + 5]
    
elif firstday == 4:
    mo = dateday[todayindex - 3]

    lmo = dateday[todayindex + 4]
    
elif firstday == 5:
    mo = dateday[todayindex - 4]

    lmo = dateday[todayindex + 3]
    
elif firstday == 6:
    mo = dateday[todayindex - 5]

    lmo = dateday[todayindex + 2]
    
elif firstday == 7:
    mo = dateday[todayindex - 6]

    lmo = dateday[todayindex + 1]
    

if mo <= day:
    if lmo < mo and month == 12:
        lmonth = 1
        lyear = year + 1
    elif lmo < mo:
        lmonth = month + 1
elif mo > day:
    if month == 1:
        lmonth = 1
        month = 12
        year = year - 1
        fyear = year
    else:
        lmonth = month
        month = month - 1

print("本周一日期为:{}年{}月{}日".format(year, month, mo))

print("下周一日期为:{}年{}月{}日".format(lyear, lmonth,lmo))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值