Last active
July 2, 2025 00:49
-
-
Save yeiichi/e928545d2f17677fa53edbee16fde0f3 to your computer and use it in GitHub Desktop.
Generate a list of ISO week date ranges (Monday to Sunday) for a given year
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import argparse | |
from collections import namedtuple | |
from datetime import date | |
Week = namedtuple("Week", ["week_number", "start_date", "end_date"]) | |
def list_iso_week_dates(year): | |
""" | |
Generate a list of ISO week date ranges (Monday to Sunday) for a given year. | |
""" | |
max_week_number = date(year, 12, 28).isocalendar().week | |
return [ | |
Week( | |
week_number=week_number, | |
start_date=date.fromisocalendar(year, week_number, 1), # Mon | |
end_date=date.fromisocalendar(year, week_number, 7) # Sun | |
) | |
for week_number in range(1, max_week_number + 1) | |
] | |
def parse_arguments(): | |
""" | |
Parse and return command-line arguments. | |
""" | |
parser = argparse.ArgumentParser() | |
parser.add_argument("year", type=int, help="Target year (yyyy)") | |
return parser.parse_args() | |
def format_week(week): | |
""" | |
Format a single week's details for display. | |
""" | |
return f'Week {week.week_number:2}: {week.start_date}–{week.end_date}' | |
def print_weeks(year): | |
""" | |
Print all ISO week date ranges for the input year. | |
""" | |
print(f'\n\033[93mISO Weeks in {year} (Monday–Sunday):\033[0m') | |
weeks = list_iso_week_dates(year) | |
for week in weeks: | |
print(format_week(week)) | |
if __name__ == "__main__": | |
args = parse_arguments() | |
print_weeks(args.year) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment