简体   繁体   English

如何使用python将日历周偏移2天

[英]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. 我需要从日期中获取偏移2的日历周。通常,ISO日历通过将星期一作为第1天到第7天作为星期日来返回日历周。但是我想将星期六作为第一天,将星期五作为星期五作为一周中的最后一天。

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 . 实际输出: 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' . 但是我需要输出为1。在ISO日历中,它们已将日历周1用作日期“ '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' . 但是我需要日历周1具有以下日期'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. 我提供了一个解决方案,可以在访问ISO日历之前添加一段代码。 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. 我这样做是因为无法更改ISO日历的源代码。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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