繁体   English   中英

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

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

我需要从日期中获取偏移2的日历周。通常,ISO日历通过将星期一作为第1天到第7天作为星期日来返回日历周。但是我想将星期六作为第一天,将星期五作为星期五作为一周中的最后一天。

我使用了以下代码:

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

实际输出: 52

但是我需要输出为1。在ISO日历中,它们已将日历周1用作日期“ '29, 30, 31, 1, 2, 3, 4' 但是我需要日历周1具有以下日期'27, 28, 29, 30, 31, 1, 2' 就像我需要两天的偏移量一样。

您可以使用日历模块。 例:

import calendar

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

我提供了一个解决方案,可以在访问ISO日历之前添加一段代码。 我需要偏移两天,因此最初我将天数增加了两天,然后根据我的要求使用新的日期来获取日历周,该日历周从星期六到星期五开始(但通常从星期一开始到星期日)。 请检查此代码,然后告诉我是否可以。 我这样做是因为无法更改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