如何判断当前月份是否是第一周
我正在用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,那你就是在第一周。