Files
Lottery_Project/util/drawing.py
T

50 lines
2.0 KiB
Python

from datetime import datetime
from dateutil.relativedelta import relativedelta, MO, TU, WE, FR, SA
def get_next_draw_date(game: str | None, from_date: str | None = None) -> str:
"""
Gets the next drawing date from the current or specified date for the given game
If the current date is the next drawing date, the current date is returned
:param game: megamillions or powerball
:param from_date: date to get next drawing date from, if omitted the current date is used
:return: next drawing date
Examples:
>>> get_next_draw_date(game='megamillions', from_date='02/15/2026')
'02/17/2026'
>>> get_next_draw_date(game='powerball', from_date='02/15/2026')
'02/16/2026'
"""
return_date = None
return_date_format = '%m/%d/%Y'
# if no date was specified, use today's date
if from_date is None:
from_date = datetime.today()
else:
from_date = datetime.strptime(from_date, return_date_format)
day_of_week = from_date.weekday()
# target the selected game
if game == 'megamillions':
"""drawings are on Tuesday and Friday"""
if day_of_week in [1, 4]:
return_date = from_date.strftime(return_date_format)
elif day_of_week in [2, 3]:
return_date = (from_date + relativedelta(weekday=FR)).strftime(return_date_format)
elif day_of_week in [5, 6, 0]:
return_date = (from_date + relativedelta(weekday=TU)).strftime(return_date_format)
elif game == 'powerball':
"""drawings are on Monday, Wednesday, and Saturday"""
if day_of_week in [0, 2, 5]:
return_date = from_date.strftime(return_date_format)
elif day_of_week == 1:
return_date = (from_date + relativedelta(weekday=WE)).strftime(return_date_format)
elif day_of_week in [3, 4]:
return_date = (from_date + relativedelta(weekday=SA)).strftime(return_date_format)
elif day_of_week == 6:
return_date = (from_date + relativedelta(weekday=MO)).strftime(return_date_format)
return return_date