2010-07-01 2 views
2

Я пишу небольшую функцию полезности в 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 < n < 5 (в зависимости от месяца конечно).

Как только у меня есть список списков, я затем намерен проверить, является ли текущий день элементом в списке.

Может ли кто-нибудь показать, как я могу получить результат из метода calendar.month() в список списков?

Последнее, но не менее важное, я могу изобретать колесо здесь. Если есть встроенный способ сделать это (или, возможно, более Pythonic-способ сделать это), пожалуйста, сообщите мне об этом.

ответ

5

Вот простая функция, которая покажет вам ли сегодня в первой неделе месяца:

from datetime import date 

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

Этого проще обрабатывать вывод вызова в библиотеке календаря; просто возьмите день недели в числовой форме (которая начинается с 0), а затем вычтите день месяца (который начинается с 1). Если результат не менее -1, вы в первую неделю.

+1

Это очень быстрое и легкое решение. +1 для умения. :) – jathanism

+0

'++'. Еще лучше упростить условие 'return today.weekday()> today.day'? –

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]] 
1

Вот общее решение, использующее стандартную библиотеку.

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 
Смежные вопросы