如何判断当前月份是否是第一周

5 投票
3 回答
3250 浏览
提问于 2025-04-16 00:41

我正在用Python写一个小工具函数,这个函数会返回一个布尔值,用来判断今天是否在这个月的第一周。

到目前为止,我的代码是这样的:

import calendar
import time
y, m = time.localtime(time.time())[:2]
data = calendar.month(y, m)

In [24]: type(temp)
Out[24]: <type 'str'>

In [25]: print temp
-------> print(temp)
     July 2010
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

我想把这个字符串放进一个列表的列表里。其实,我只想要第一行,因为它代表的是第一周,但我可以把这个函数做得更通用,这样我就可以检查我们是否在第n周,n的范围是1到4(当然这取决于月份)。

一旦我有了一个列表的列表,我就打算检查今天是否在这个列表里。

有没有人能告诉我,如何把calendar.month()方法的输出转换成列表的列表?

最后,我可能是在重复造轮子。如果有现成的方法可以做到这一点(或者更符合Python风格的方法),请告诉我。

3 个回答

2
calendar.monthcalendar(2010,7)

这段代码会返回一个列表,里面包含了多个列表,结构是这样的:

[[0, 0, 0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24, 25], [26, 27, 28, 29, 30, 31, 0]]
4

这里有一个使用标准库的完整解决方案。

import calendar
import datetime

def in_first_week(today):
    """Expects a datetime object"""
    weeks = calendar.monthcalendar(today.year, today.month)
    firstweek = weeks[0]
    return today.day in firstweek

today = datetime.date.today()
# => datetime.date(2010, 7, 1)
print in_first_week(today)
# => True

then = datetime.date(2010,7,10)
print in_first_week(then)
# => False
5

这里有一个简单的函数,可以告诉你今天是否在这个月的第一周:

from datetime import date

def first_week():
    today = date.today()
    return today.weekday() - today.day >= -1

这个方法比处理日历库的输出要简单多了;你只需要获取今天是星期几的数字(从0开始),然后减去这个月的日期(从1开始)。如果结果至少是-1,那你就是在第一周。

撰写回答