중국 역법 계산을 검증하는 방법

기준 날짜

음력 날짜 변환, 절기 시각, 황력의 분류, 인터페이스 동작을 각각 따로 검증합니다. 한 부분이 일치한다고 다른 부분까지 옳다는 뜻은 아닙니다. 유용한 검증 사례에는 달 중간의 날짜뿐 아니라 달과 해의 경계도 포함됩니다.

달력 기준과 적용 범위가 명시된 독립적인 참고 자료를 고릅니다. 같은 계산 엔진을 사용하는 다른 웹사이트는 같은 오류를 되풀이할 수도 있습니다. 이후 변경 사항을 추적할 수 있도록 예상값과 함께 참고 자료의 판본이나 버전을 기록합니다.

아틀라스가 지원하는 상용력 날짜는 서기 1년부터 2100년까지입니다. 고정된 버전의 계산 엔진은 1582-10-04까지 율리우스력 날짜를 사용하고, 그다음은 그레고리력 1582-10-15로 이어집니다. 이 상용력 날짜 순서에는 10월 5일부터 10월 14일까지가 없습니다. 도입 이전의 과거까지 그레고리력을 확장한 역산 그레고리력과 비교한다면, 이른 시기의 날짜에는 다른 대응 관계를 검증하게 됩니다.

이 기준은 소프트웨어의 상용력 날짜 표기를 설명합니다. 역사적으로 중국에서 어떤 달력을 사용했는지를 입증하지는 않습니다. 지원 범위의 양 끝과 범위 밖 날짜의 처리를 검증합니다. 상용력 날짜의 범위는 경계일이 다른 완전한 음력 해들의 범위와도 다릅니다.

각 결과는 상용력 날짜와 달력 기준, 음력 연도, 음력 월 번호, 윤달 여부, 음력 일을 모두 포함하여 저장합니다. 달 번호와 그해 안에서의 순서를 구별합니다. 윤6월은 시간순으로 일곱 번째 달이지만 월 번호는 여전히 6입니다.

검증 사례

정확한 날짜 확인

이 날짜들은 춘절, 유효한 그레고리력 윤일, 음력 평달과 윤달의 양 끝을 포함합니다. 이 표에서 음력 연도 표지는 해당 음력 해가 시작하는 그레고리력 연도입니다. ‘평달’은 윤달 여부 값이 false라는 뜻입니다.

그레고리력 날짜음력 연도종류음력 일
2024-02-09202312평달30
2024-02-1020241평달1
2024-02-2920241평달20
2025-07-2420256평달30
2025-07-2520256윤달1
2025-08-2220256윤달29
2025-08-2320257평달1
2033-12-21203311평달30
2033-12-22203311윤달1
2034-01-19203311윤달29
2034-01-20203312평달1
2034-02-1920341평달1

각 날짜를 양방향으로 변환합니다. 그레고리력에서 음력으로 변환하면 음력의 네 필드가 모두 나와야 하며, 음력에서 그레고리력으로 변환하면 표의 날짜가 복원되어야 합니다. 그런 다음 첫날만이 아니라 경계 주변의 날짜 순서 전체를 검증합니다. 이렇게 하면 잘못된 달의 시작일과 윤달 표시를 빠뜨린 화면 표기를 구별할 수 있습니다.

왕복 변환만으로 정확성을 입증할 수는 없습니다. 두 함수가 같은 잘못된 표를 공유하면서도 서로의 변환을 완벽히 되돌릴 수 있습니다. 독립적인 예상값과 비교하는 것은 별도의 검증입니다. 전수 비교를 했다면 비교한 날짜 수, 사용한 참고 자료, 모든 불일치를 기록해야 합니다.

구조와 입력 검증

검증 항목예상 동작
음력 달의 마지막 날에서 다음 날로 이동올바른 월 번호·윤달 여부·음력 연도를 가진, 시간순으로 다음 달의 1일이 됨
평달에서 그 뒤의 윤달로 이동월 번호를 되풀이하고 윤달 여부를 true로 바꿈
윤달에서 다음 달로 이동윤달 표시를 해제하고 월 번호를 다음으로 넘김. 필요하면 연도도 넘어감
29일인 2025년 윤6월에 30일을 요청존재하지 않는 음력 날짜이므로 거부함
해당 윤달이 없는 해에 그 윤달을 요청평달로 대신하지 않고 거부함
2000년 2월 29일을 입력한 뒤 2100년 2월 29일을 입력첫 그레고리력 날짜는 허용하고 두 번째는 거부함
아틀라스의 율리우스력 기준으로 1500년 2월 29일을 입력유효한 율리우스력 날짜로 허용함
아틀라스의 역법 전환 기준으로 1582-10-04에서 상용력 하루를 넘김정확히 하루가 지난 1582-10-15가 됨
유효한 날짜를 음력으로 바꾸었다가 되돌림윤달의 정체성을 잃지 않고 원래 날짜를 복원함

율리우스력은 4년마다 윤일을 더합니다. 그레고리력에서는 세기 연도가 400으로 나누어떨어지지 않으면 윤년에서 제외합니다. 윤일 검증에서 상용력을 명시해야 하는 이유입니다.

거부 검증은 날짜를 엄격하게 받는 입력 인터페이스를 설명합니다. 내부 라이브러리는 범위를 벗어난 일자를 다음 달로 넘기는 등의 정규화 동작을 문서화하여 제공할 수도 있습니다. 정규화한 값을 원래 입력과 혼동하지 않도록 이러한 동작은 따로 검증합니다.

인터페이스 검증

언어 전환, 브라우저 새로고침, 달 이동, 황력 항목은 변환 함수와 별도로 검증합니다. 언어를 바꿀 때에는 선택한 날짜와 표시 중인 달이 유지되어야 합니다. 다른 달을 둘러볼 때에는 새로운 날을 고를 때까지 선택한 날짜가 그대로여야 합니다. 황력 항목이 기기 현지의 그레고리력 날짜를 여는지, 고정된 날짜 페이지가 다른 시간대에서도 명시된 상용력 날짜를 유지하는지 확인합니다.

기기 현지 날짜와 달력의 기준 날짜가 다른 순간도 검증에 넣습니다. 그러면 천문 계산의 기준 시계로 황력 날짜를 고르는 오류나, 브라우저 시계로 음력 달의 경계를 다시 구성하는 오류를 찾아낼 수 있습니다.

절기와 경계

절기를 비교하려면 어느 절기인지, 상용력 날짜, 시각, 시각 기준, 공개된 정밀도가 필요합니다. 두 값을 같은 상용력과 시각 기준으로 맞춘 뒤 비교합니다. 분 단위로 발표된 시각으로는 초 단위의 일치를 입증할 수 없습니다.

배정된 달력 날짜와 시각의 허용 오차를 별도로 검증합니다. 1분 미만의 차이는 반올림한 표시에서는 허용할 수 있어도, 현상을 자정의 잘못된 쪽에 놓을 수 있습니다. 모든 날짜의 허용 오차를 넓히는 대신, 해당 경계에 대해 알려진 불확실성을 기록합니다.

삭과 중기가 같은 기준 날짜에 드는 사례를 포함합니다. 중기의 순간이 합보다 먼저여도 그 중기는 새 달력 달에 속합니다. 현상 시각의 순서만 확인하는 검증은 이 차이를 놓칠 수 있습니다.

윤달 번호를 검증할 때에는 2033–2034년의 순서를 포함합니다. 2033년의 평달 8월과 2034년의 1월에는 중기가 없지만, 그 사이의 윤달은 11월입니다. 중기가 없는 모든 달을 윤달로 처리하는 계산은 이 검증을 통과하지 못합니다.

황력과 역사 날짜 검증

황력의 분류

의(宜)는 하기 좋은 일, 기(忌)는 피할 일을 뜻합니다. 삭이나 음력 날짜가 일치한다고 이 목록이 검증되는 것은 아닙니다. 선택한 황력의 기준이나 데이터셋에 맞추어 조회 규칙을 검증한 뒤, 영어 활동 표기도 별도로 확인합니다. 명시적인 ‘없음’ 결과 역시 데이터 누락과 구별되어야 합니다.

황력의 분류가 절기에 바뀌는 경우, 경계가 그 절기 날짜의 시작인지 절기의 정확한 순간인지 기록합니다. 선택한 경계의 앞뒤를 모두 검증합니다. 이러한 월별 분류는 음력 달의 시작에 바뀌지 않을 수도 있습니다.

천간과 지지의 주기인 간지도 해의 경계를 명시해야 합니다. 춘절을 기준으로 한 해의 표지와 입춘을 기준으로 한 표지는 두 경계 사이의 기간에 다를 수 있습니다. 각 필드를 그 필드가 명시한 기준에 따라 비교합니다.

역사 날짜 변환

역사 문서의 경우에는 변환 방법을 고르기 전에 왕조나 연호의 해, 지역, 달 표기, 윤달 표시, 기록된 간지일을 확인합니다. 옛 역법은 다른 천문 계산법과 시각 기준을 사용했습니다. 따라서 현대의 계산을 과거로 확장한 결과는 그 기록에 실제로 사용된 달력과 다를 수 있습니다.

전사문, 그 해석, 변환한 날짜를 별도의 필드로 보존합니다. 문서에 숫자로 된 날짜와 간지일이 함께 있으면, 하나에 맞추려고 다른 하나를 버리지 말고 두 표기가 일치하는지 검증합니다.

서기 1–2100년

개인정보 처리방침