2015-02-06 62 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