2014-07-08 22 views
1

我使用的日曆和monthdatescalendar()使用Calendar.monthdatescalendar()勞動

import Calendar 

mycal = calendar.Calendar(0) 
laborday = mycal.monthdatescalendar(2003, 9)[0][0] 

正確返回2003年9月1日

laborday = mycal.monthdatescalendar(2004, 9)[0][0] 

收益2014年8月30日是期望的結果

什麼是正確會首先以正確的方式***月份(任何月/年)的一天沒有得到事先的最後一天***一個月,因爲你正確的第一個星期?

+0

的可能重複[Python的:找到的第一個星期一的日期指定的日期後(http://stackoverflow.com/questions/6558535/python-find-的最新換的先星期一後-A-給定-A-日期) –

回答

1

問題是monthdatescalendar返回整週,所以如果需要填寫第一週的話,將包括前幾個月。

要獲得正確的日期,您需要檢查第一個星期一datetime對象的月份,並根據需要選擇以下星期一。

import calendar 

def getLaborDay(year): 
    month = 9 
    mycal = calendar.Calendar(0) 
    cal = mycal.monthdatescalendar(year, month) 
    if cal[0][0].month == month: 
     return cal[0][0] 
    else: 
     return cal[1][0] 

print getLaborDay(2003) 
print getLaborDay(2004) 

Gives:

2003-09-01 
2004-09-06