如何确定我们是否在当月的第一周

时间:2010-07-01 16:52:50

标签: python calendar

我在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周,其中1&lt; n&lt; 5(取决于当然的月份)。

一旦我有了一个列表列表,我就打算检查当前日期是否是列表中的一个元素。

有人能说明如何将calendar.month()方法的输出转换为列表列表吗?

最后但并非最不重要,我可能会在这里重新发明轮子。如果有这样做的内置方式(或者更多的Pythonic方式)请有人告诉我。

3 个答案:

答案 0 :(得分:5)

这是一个简单的功能,可以告诉你今天是否在这个月的第一周:

from datetime import date

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

这比处理日历库中的调用输出更简单;只需以数字形式(从0开始)获取星期几,然后减去月中的某一天(从1开始)。如果结果至少为-1,那么你就在第一周。

答案 1 :(得分: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]]

答案 2 :(得分:2)

以下是使用标准库的完整解决方案。

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