파이썬, 날짜의 요일을 빠르게 계산하는 함수

 

Zeller 합동식을 이용한 빠른 요일 확인 함수입니다.

 

[소스 코드]

import math

def dayofweek(y, m, d):
  """
  주어진 년(y), 월(m), 일(d)에 해당하는 요일을 계산합니다.

  Args:
    y: 년도 (정수)
    m: 월 (1 ~ 12, 정수)
    d: 일 (정수)

  Returns:
    요일 정수(0:일요일, 1:월요일, ..., 6:토요일)와 요일 첫 글자(한글)
  """
  t = (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4) # 월별 오프셋 테이블
  days = ("일", "월", "화", "수", "목", "금", "토")  
  if m < 3:  # 1월과 2월은 이전 해의 13월, 14월로 취급
    y -= 1
  # Zeller 합동식 계산
  result = (y + y//4 - y//100 + y//400 + t[m-1] + d) % 7
  return result, days[result]


if __name__ == "__main__":
  # 사용 예제 1 ------------------------
  year = 2025 
  month = 4  
  day = 16   

  weekday_num, weekday = dayofweek(year, month, day)  # 3, '수'
  print(f"{year}년 {month}월 {day}일은 {weekday+"요일"}입니다. (결과: {weekday_num})")

  # 사용 예제 2 ------------------------
  year = 2025
  month = 12
  day = 25
  weekday_num, weekday = dayofweek(year, month, day)  # 4, '목'
  print(f"{year}년 {month}월 {day}일은 {weekday+"요일"}입니다. (결과: {weekday_num})")

 

[실행 결과]

2025년 4월 16일은 수요일입니다. (결과: 3)
2025년 12월 25일은 목요일입니다. (결과: 4)

반응형

+ Recent posts