Найти - Пользователи
Полная версия: Посчитать количество определенных дней в диапазоне дат
Начало » Python для новичков » Посчитать количество определенных дней в диапазоне дат
1
kozlo22
Необходимо посчиать количество суббот и воскресений в диапазоне дат.
from datetime import date
def check_week_day(day_date):
	if day_date.weekday() == 5 or day_date.weekday() == 6:
		return 1
	else:
		return 0
def check(start_date, end_date):
	tmp_date = start_date
	res = 0
	days_counter = 1
	month_counter = 1
	year_counter = 1
	while tmp_date != end_date:
		try:
			tmp_date = date(tmp_date.year, tmp_date.month, tmp_date.day + days_counter)
			res += check_week_day(tmp_date)
		except ValueError:
			try:
				tmp_date = date(tmp_date.year, tmp_date.month + month_counter, days_counter - tmp_date.day)	
				res += check_week_day(tmp_date)
			except ValueError:
				tmp_date = date(some_date.year, some_date.month, some_date.day)
				res += check_week_day(tmp_date)
		days_counter += 1
	return res

Вот такой стремный код. Он не работает при определенных условиях. Если разница в датах больше года, то вываливается ошибка на 25 строке “Day of the month range”.
Почему он ругается понятно, как мне модифицировать код, чтобы работало?
Пробовал по другому решать, но вот уперся я в такой метод и других решений не вижу.
fongostev
Выведи принтами отладочную информацию и посмотри, где код ломается.
Alen
Что-то всё через чур сложно
#!/usr/bin/env python
import datetime
def count_weekend(start, end):
    """
    >>> start =  datetime.date(2014, 4, 21)
    >>> end = datetime.date(2013, 1, 21)
    >>> count_weekend(start, end)
    130
    """
    delta = abs((start - end).days /7) * 2
    if abs((start - end).days % 7) > 1:
        delta += 2
    elif abs((start - end).days % 7):
        delta += 1
    return delta
if __name__ == '__main__':
     import doctest
     doctest.testmod()
kozlo22
Alen
знаю, но мне ничего более толкового в голову не приходило.
Кстати, если передать date(2013, 9, 18), date(2013, 9, 23), то вернет 3.428571428571429
makx
from datetime import date,timedelta
""
def weekCount(from_date, to_date):
    return len([1 for i in range((to_date - from_date).days + 1)
                if (from_date + timedelta(i)).isoweekday() in [6,7]]) 
kozlo22
makx
да, вроде работает.
kozlo22
Просто не понял для чего нужна функция timedelta - трудности перевода.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB