2012-06-06 2 views
2

мне нужно рассчитать даты на неделю в питонеHowto вычислить первую дату недели и дату последней на неделю в питоне

мне это нужно

year = 2012 
week = 23 
(a,b) = func (year,week) 
print a 
print b 

>>>2012-04-06 
>>>2012-06-10 

вы могли бы мне помочь?

+9

Это долгая неделя азартных игр –

+7

@ Энтони, ты забыл об этом, или это просто [хобби] ​​(http://xkcd.com/37/) твоего? –

+0

Это так. @ Джонатан, [что ты пробовал] (http://whathaveyoutried.com)? –

ответ

12

Объект даты содержит метод weekday().

Это возвращает 0 для понедельника 6 в воскресенье.

(от прибегая к помощи) здесь одно решение: http://www.protocolostomy.com/2010/07/06/python-date-manipulation/)

Я думаю, что это можно сделать чуть менее многословным, так вот мой удар у него:

def week_magic(day): 
    day_of_week = day.weekday() 

    to_beginning_of_week = datetime.timedelta(days=day_of_week) 
    beginning_of_week = day - to_beginning_of_week 

    to_end_of_week = datetime.timedelta(days=6 - day_of_week) 
    end_of_week = day + to_end_of_week 

    return (beginning_of_week, end_of_week) 
+0

это не в python, но результат такой же для i в 'seq 0 52' ; do echo "SELECT date ('now', 'localtime', 'start of year', '$ (($ i * 7)) days') AS ws, date ('now', 'localtime', 'start от года ',' $ (($ i * 7 + 7)) дней ") AS we;"; done | sqlite3 это будет генерировать список недельных ограничений для SQL и во втором проходе я буду использовать его для sumarize во втором SQL SELECT, как я могу отправить NEWLINE здесь ????? enter не работает как обычный –

+0

неделя 1 2012-01-01 по 2012-01-07 неделя 2 2012-01-08 по 2012-01-14 неделя 3 2012-01-15 по 2012-01-21 неделя 4 2012-01-22 по 2012-01-28 неделя 5 2012-01-29 по 2012-02-04 неделя 6 2012-02-05 по 2012-02-11 неделя 7 2012-02-12 по 2012 год -02-18 неделя 8 2012-02-19 по 2012-02-25 неделя 9 2012-02-26 по 2012-03-03 –

+0

@JonatanWagner Собираетесь ли вы принять ответ? –

2

Я думаю, что ответ @Anthony Sottile должен будь то:

def week_magic(day): 
    day_of_week = day.weekday() 

    to_beginning_of_week = datetime.timedelta(days=day_of_week) 
    beginning_of_week = day - to_beginning_of_week 

    to_end_of_week = datetime.timedelta(days=6 - day_of_week) 
    end_of_week = day + to_end_of_week 

    return (beginning_of_week, end_of_week) 

Это работает!

0

Я думаю, что ответ, который он ищет, находится в datetime.isocalendar (datetime) Он возвращает 3-кортеж, содержащий год ISO, номер недели и день недели.

В любой конкретный год (например, 2015 год) можно определить первый день первой недели, а затем продолжать добавлять дни, используя функцию timedelta, чтобы найти нужную запрошенную неделю. С помощью этой информации можно вернуть первый и последний день этой недели.

5

Немного устаревший ответ, но есть хороший модуль под названием isoweek, который действительно получает трюк. Чтобы ответить на исходный вопрос, вы можете сделать что-то вроде:

from isoweek import Week  

week = Week(2012, 23) 
print(week.monday()) 
print(week.sunday()) 

Надеюсь, это поможет кому угодно.