이 계산기는 무엇을 해주나요?
내가 무슨 요일에 태어났는지 궁금했던 적 있으신가요? 느긋한 일요일이었을까요, 아니면 분주한 월요일이었을까요? 이 생일 요일 계산기는 여러분의 생년월일이 정확히 무슨 요일이었는지 알려주고, 덤으로 다가오는 생일이 무슨 요일에 떨어지는지까지 보여줍니다. 그레고리력의 모든 날짜에 사용할 수 있습니다.
사용 방법
태어난 연도를 입력하고, 드롭다운에서 태어난 월을 고른 다음, 태어난 날짜를 입력하세요. 계산하기를 누르면 됩니다. 상단 박스에는 여러분이 태어난 요일이 표시되고, 아래 표에는 다가오는 생일의 요일이 나와 있어 미리 파티 계획을 세우기에 좋습니다.
계산 원리
이 도구는 어떤 날짜든 요일을 알아내는 고전적인 알고리즘인 첼러의 공식(Zeller's congruence)을 사용합니다. 1월과 2월은 전년도의 13월과 14월로 취급합니다. 공식은 h 값을 계산하는데, 여기서 0은 토요일, 1은 일요일과 같은 식으로 대응됩니다. 화면에 표시할 때는 우리에게 익숙한 일요일~토요일 순서로 다시 변환합니다. 순수한 정수 연산만 사용하기 때문에 정확하며 오차가 누적되지 않습니다.
$$h = \left( D + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + K + \left\lfloor \frac{K}{4} \right\rfloor + \left\lfloor \frac{J}{4} \right\rfloor + 5J \right) \bmod 7$$$$\text{where}\quad \left\{ \begin{aligned} D &= \text{Birth Day} \\ m &= \text{Month}\ \ (\text{Jan,Feb} \to 13,14\text{ of prior year}) \\ Y &= \text{Birth Year}\ (\text{adjusted}) \\ K &= Y \bmod 100,\quad J = \left\lfloor Y/100 \right\rfloor \end{aligned} \right.$$
실제 계산 예시
1990년 7월 15일을 예로 들어 보겠습니다. 여기서 \(m = 7\), \(d = 15\), 연도 = 1990 이므로 \(k = 90\), \(j = 19\) 입니다. 그러면 $$h = (15 + \lfloor 13\cdot 8/5 \rfloor + 90 + \lfloor 90/4 \rfloor + \lfloor 19/4 \rfloor + 5\cdot 19) \bmod 7 = (15 + 20 + 90 + 22 + 4 + 95) \bmod 7 = 246 \bmod 7 = 1$$, 즉 일요일이 됩니다. 따라서 1990년 7월 15일에 태어난 사람은 일요일에 태어난 것입니다.
변수 정의
- \(D\) — 월의 일자. 정확히 쓰인 달력 날짜로 1부터 31까지입니다. \(D\)에는 조정이 절대 적용되지 않습니다.
- \(m\) — 조정된 월 번호. 3월 = 3부터 12월 = 12까지는 그대로 사용됩니다. 1월과 2월은 특별합니다: 이들은 이전 연도의 13월과 14월로 취급됩니다. 이는 젤러의 합동식이 3월을 연도의 시작으로 취급하기 때문이며, 이는 윤일을 사이클의 끝에 유지합니다.
- \(Y\) — 조정된 연도. 날짜가 1월 또는 2월이면, 달력 연도에서 1을 뺍니다(이 체계에서 그 월들은 이전 연도에 속하기 때문입니다). 다른 모든 월들은 원래 연도를 유지합니다.
- \(K\) — 세기의 연도. \(K = Y \bmod 100\)은 조정된 연도의 마지막 두 자리입니다. 2024의 경우 24이고, 1999의 경우 99입니다.
- \(J\) — 0을 기준으로 한 세기. \(J = \lfloor Y / 100 \rfloor\)은 올림하지 않은 세기 번호입니다. 2024의 경우 20이고, 1999의 경우 19입니다.
- \(h\) — 결과 요일 코드. 모든 항을 결합한 후 7로 나눈 나머지로, 위의 결과 코드 표를 사용하여 요일에 매핑되는 0–6의 값을 제공합니다.
더 많은 해결 예제
예제 1 — 1월 날짜(월 및 연도 이동 표시)
2000년 1월 15일을 보십시오. 월이 1월이므로 \(m = 13\)으로 설정하고 이전 연도를 사용하면, 조정된 연도는 \(Y = 1999\)입니다. 그러면 \(D = 15\), \(K = 1999 \bmod 100 = 99\), 그리고 \(J = \lfloor 1999/100 \rfloor = 19\)입니다.
$$h = \left(15 + \left\lfloor \tfrac{13(13+1)}{5} \right\rfloor + 99 + \left\lfloor \tfrac{99}{4} \right\rfloor + \left\lfloor \tfrac{19}{4} \right\rfloor + 5 \cdot 19 \right) \bmod 7$$
바닥 항들은 \(\lfloor 182/5 \rfloor = 36\), \(\lfloor 99/4 \rfloor = 24\), 그리고 \(\lfloor 19/4 \rfloor = 4\)입니다. 합계: \(15 + 36 + 99 + 24 + 4 + 95 = 273\). 그러면 \(273 \bmod 7 = 0\)이므로 \(h = 0\) → 토요일. 2000년 1월 15일은 실제로 토요일이었습니다.
예제 2 — 윤일 생일(2000년 2월 29일)
2000년 2월 29일의 경우, 2월도 이동됩니다: \(m = 14\)이고 조정된 연도는 \(Y = 1999\)이므로 \(K = 99\), \(J = 19\), 그리고 \(D = 29\)입니다.
$$h = \left(29 + \left\lfloor \tfrac{13(14+1)}{5} \right\rfloor + 99 + \left\lfloor \tfrac{99}{4} \right\rfloor + \left\lfloor \tfrac{19}{4} \right\rfloor + 5 \cdot 19 \right) \bmod 7$$
여기서 \(\lfloor 195/5 \rfloor = 39\), \(\lfloor 99/4 \rfloor = 24\), \(\lfloor 19/4 \rfloor = 4\)입니다. 합계: \(29 + 39 + 99 + 24 + 4 + 95 = 290\), 그리고 \(290 \bmod 7 = 3\)이므로 \(h = 3\) → 화요일. 2000년 2월 29일은 화요일에 떨어졌습니다. 2000은 400으로 나누어지기 때문에 윤년입니다.
예제 3 — 최근 날짜(2023년 7월 4일)
2023년 7월 4일의 경우, 7월은 정상 월이므로 \(m = 7\)이고 연도 변경이 없습니다: \(Y = 2023\), \(D = 4\), \(K = 23\), \(J = 20\)입니다.
$$h = \left(4 + \left\lfloor \tfrac{13(7+1)}{5} \right\rfloor + 23 + \left\lfloor \tfrac{23}{4} \right\rfloor + \left\lfloor \tfrac{20}{4} \right\rfloor + 5 \cdot 20 \right) \bmod 7$$
바닥 항들은 \(\lfloor 104/5 \rfloor = 20\), \(\lfloor 23/4 \rfloor = 5\), \(\lfloor 20/4 \rfloor = 5\)입니다. 합계: \(4 + 20 + 23 + 5 + 5 + 100 = 157\), 그리고 \(157 \bmod 7 = 3\)이므로 \(h = 3\) → 화요일. 2023년 독립기념일은 화요일이었습니다.
자주 묻는 질문
아주 오래된 날짜도 계산되나요? 네, 선행 그레고리력(proleptic Gregorian calendar)의 모든 날짜에 대해 작동합니다. 다만 1582년 달력 개혁 이전의 날짜는 율리우스력을 사용한 당시 기록과 다를 수 있습니다.
윤년은 어떻게 처리되나요? 첼러의 공식은 모듈러 연산을 통해 윤년을 자동으로 처리하므로 2월 29일 같은 날짜도 정확하게 계산됩니다.
올해 생일이 이미 지났다면요? 올해 생일이 이미 지났다면 다음 생일 결과는 자동으로 내년으로 넘어가 계산됩니다.