简体   繁体   中英

How to change the calendar week by offset of 2 days using python

I need to get the calendar week from the date with an offset of 2. In general ISO calendar returns the calendar week by taking the Monday as day 1 to Sunday as day 7. But I want to take Saturday as the first day and the Friday as the last day in a week.

I have used the below code:

from datetime import datetime, timedelta, date
x2='2014-12-28'
year,month,day = x2.split('-')
CW = date(int(year), int(month), int(day)).isocalendar()[1]
print CW

Actual Output: 52 .

But I need the output as 1. In ISO calendar they have taken as Calendar week 1 for the dates '29, 30, 31, 1, 2, 3, 4' . But I need the calendar week 1 to have the following dates '27, 28, 29, 30, 31, 1, 2' . Like I need the days to have offset of 2.

You can use the calendar module. Example:

import calendar

(calendar.weekday(2015, 2, 6) - calendar.SATURDAY) % 7

I have come with a solution by adding a piece of code before accessing ISO calendar. I need to put an offset of two days so initially I increased the days by two and then I use this new date to get the calendar week according to my requirement where this calender week starts from Saturday to Friday (but normally it starts from Monday to Sunday). Please check this code and tell me whether is it ok or not. I did this since am not able to change the source code of ISO calendar.

from datetime import datetime, timedelta, date


def LEAP(year):
    year = year % 4
    if year == 0: #( y % 4 == 0 ) and ( ( y % 100 != 0 ) or ( y % 400 == 0 ) )
        LEAP = 1
    else:
        LEAP = 0
    return LEAP

x2 = '2015-10-2'
year2,month2,day2 = x2.split('-')

day = int(day2)
month = int(month2)
year=int(year2)


if (month == 1 and day == 30):
    day1 = 1
    month = month + 1

elif (month == 3 and day == 30):
    day1 = 2
    month = month + 1

elif (month == 5 and day == 30):
    day1 = 2
    month = month + 1

elif (month == 7 and day == 30):
    day1 = 2
    month = month + 1

elif (month == 8 and day == 30):
    day1 = 2
    month = month + 1

elif (month == 10 and day == 30):
    day1 = 2
    month = month + 1

elif (month == 1 and day == 31):
    day1 = 3
    month = month + 1

elif (month == 3 and day == 31):
    day1 = 3
    month = month + 1

elif (month == 5 and day == 31):
    day1 = 3
    month = month + 1

elif (month == 7 and day == 31):
    day1 = 2
    month = month + 1

elif (month == 8 and day == 31):
    day1 = 3
    month = month + 1

elif month == 10 and day == 31:
    day1 = 2
    month = month + 1

elif month == 12 and day == 30:
        day1 = 2
        month = 1
        year = year + 1

elif month == 12 and day == 31:
        day1 = 3
        month = 1
        year = year + 1

elif month == 4 and day == 29:
        day1 = 2
        month = month + 1
        #return day1

elif month ==  6 and day == 29:
        day1 = 2
        month = month + 1

elif month == 9 and day == 29:
        day1 = 2
        month = month + 1

elif month == 11 and day == 29:
        day1 = 2
        month = month + 1


elif month == 4 and day == 30:
        day1 = 3
        month = month + 1
        #return day1

elif month ==  6 and day == 30:
        day1 = 3
        month = month + 1

elif month == 9 and day == 30:
        day1 = 3
        month = month + 1

elif month == 11 and day == 30:
        day1 = 3
        month = month + 1

elif LEAP(int(year)) and day > 25 and month ==2:
    if month == 2 and day == 26:
        #if LEAP(int(year)):
            day1 = 29
            month = month

    elif month == 2 and day == 27:

        #if LEAP(int(year)):
            day1 = 1
            month = month + 1

    elif month == 2 and day == 28:

        #if LEAP(int(year)):
            day1 = 2
            month = month + 1

    elif month == 2  and day == 29: #and LEAP(int(year)):
        day1 = 3
        month = month + 1


elif not LEAP(int(year)) and day > 25 and month == 2:

    if month == 2 and day == 26:

    #if not LEAP(int(year)):
        day1 = 1
        month = month + 1

    elif month == 2 and day == 27:
        #if not LEAP(int(year)):
            day1 = 1
            month = month + 1

    elif month == 2  and day == 28:

        #if not LEAP(int(year)):
            day1 = 2
            month = month + 1

    else:exit


else:
    #print 'test'
    day1= day+ 2
    month = month
    year = year

CW = date(int(year), int(month), day1).isocalendar()[1]
print CW

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM