2015-02-06 61 views
0

我需要从偏移量为2的日期中获取日历星期。一般来说,ISO日历以星期一为第1天到周日的形式返回日历星期第7天。但我想把星期六作为第一天,将星期五作为一周的最后一天。如何使用python更改日历周的偏移量2天

我用下面的代码:

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日历中,他们将'29, 30, 31, 1, 2, 3, 4'日期作为日历第1周。但我需要日历周1有以下日期'27, 28, 29, 30, 31, 1, 2'。就像我需要的日子有偏移量2.

+0

我希望我能为我的问题提出一个解决方案。由于我无法修改ISO日历,所以我在调用ISO日历之前添加了一段代码。请检查并告诉我是否可以。 – user3827728 2015-02-12 01:03:27

回答

0

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

import calendar 

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

感谢您的回复。但是,当我运行这个不同的日期它显示我错误的输出。例如对于2014年12月29日它是显示日历周为2,而不是它应该是1. – user3827728 2015-02-08 06:51:43

+0

任何人都可以告诉我,如何从日期(YYYY-MM-DD)获取日历周数。是否可以编辑ISO日历的源代码,如果有,请告诉我如何编辑。 – user3827728 2015-02-09 03:12:38

0

我在访问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