From 2fdd2b38f7afdd028796f1383b53ea1aa006b49e Mon Sep 17 00:00:00 2001 From: KWON Date: Mon, 28 Jul 2025 13:14:59 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8F=89=EC=9D=BC/=ED=9C=B4=EC=9D=BC=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/holiday.py | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/lib/holiday.py b/lib/holiday.py index 642c049..340b6eb 100644 --- a/lib/holiday.py +++ b/lib/holiday.py @@ -4,7 +4,7 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import yaml import requests import xml.etree.ElementTree as ET -from datetime import datetime, date +from datetime import date, datetime, timedelta from sqlalchemy import select, insert, delete # config.yaml 경로 및 로딩 @@ -134,8 +134,40 @@ def is_korean_holiday(dt: date) -> bool: finally: session.close() +def get_holiday_dates(start_date: date, end_date: date) -> set[date]: + """특정 기간 내의 휴일 목록 반환""" + session = db.get_session() + try: + stmt = select(holiday_table.c.date).where( + holiday_table.c.date.between(start_date.strftime("%Y%m%d"), end_date.strftime("%Y%m%d")) + ) + results = session.execute(stmt).scalars().all() + return set(datetime.strptime(d, "%Y%m%d").date() for d in results) + finally: + session.close() + + +def get_weekday_dates(start_date: date, end_date: date) -> set[date]: + """특정 기간 중 평일(월~금 & 비휴일) 목록 반환""" + holiday_dates = get_holiday_dates(start_date, end_date) + result = set() + curr = start_date + while curr <= end_date: + if curr.weekday() < 5 and curr not in holiday_dates: # 월(0)~금(4) + result.add(curr) + curr += timedelta(days=1) + return result + if __name__ == "__main__": - print("📌 특일정보 초기화 시작") + print("📌 휴일 테스트 시작") init_holidays() - print("✅ 특일정보 초기화 완료") + + from datetime import date + start = date(2025, 1, 1) + end = date(2025, 12, 31) + + holidays = get_holiday_dates(start, end) + print(f"🔍 {start} ~ {end} 사이 휴일 {len(holidays)}건") + for d in sorted(holidays): + print(" -", d) \ No newline at end of file