使用 Calendar.monthdatescalendar() 与劳动节

1 投票
1 回答
863 浏览
提问于 2025-04-18 12:26

我正在使用日历和monthdatescalendar()这个功能。

import Calendar

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

它正确地返回了09/01/2003。

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

但是返回了08/30/2014,这不是我想要的结果。

那么,怎样才能正确地获取每个月的第一天(无论是哪个月/年份),而不是得到上一个月的最后一天呢?因为我获取的第一周是正确的。

1 个回答

2

这个问题是因为 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)

结果是:

2003-09-01
2004-09-06

撰写回答