[음력/양력변환] 정부산하 한국천문연구원!!

오호라의 이미지

갑자기 음력/양력 변환할 일이 있어서 자료를 찾다가...

그래도, 우리나라에서 음력/양력계산에 대한 공신력이 있는 곳이 한국천문연구원이란 것을 알았습니다.

이곳에서 계산된 음력/기념일/공휴일...등이 법제처 및 정부기관으로 나가더군요.

혹시나 자료실에 음력/양력 변환 프로그램이나 필요한 자료가 있을까 찾아보다가 정말 어이없는 글을 보았습니다.

FAQ
URL : http://www.kasi.re.kr/View.aspx?id=faq&page=0&si=False&sn=False&ss=True&sc=True&keyword=%c0%bd%b7%c2&uid=40

Quote:

제목 : [고천문&역] 음양력을 변환시키는 프로그램은 없나요?

그 동안 음력을 양력으로 변환하는 프로그램에 대한 문의가 많았습니다. 음양력을 변환 시키는 간단한 프로그램은 없습니다. 음력과 양력의 변환은 어떤 규칙성이 있는 것이 아닙니다. 현재 한국천문연구원에서 사용하고 있는 음양력 프로그램은 천체운행을 계산하는 약간 복잡한 수식을 포함하는 프로그램으로 알고 있습니다. 대개는 수 십 년간의 음양력 자료를 데이터 베이스로 만들어 입력에 대한 출력을 만드는 것이 가장 간단한 프로그램입니다.

대한민국의 역서는 저희 한국천문연구원에서 발행하는데, 계산은 우주천문연구부의 역서 및 고천문연구팀에서 수행하고 있습니다. 이 역, 특히 음력 계산에서 쓰는 자료는 원칙적으로 태양과 달의 운행을 정확하게 계산한 다음 전통적인 방법에 따라 날짜를 정하고 있습니다. 태양과 달의 위치 및 각종 시각을 계산하는데 쓰이는 기초자료인 각종 인자들은 미국 해군성천문대의 천체력 등을 참고하고 있는 것으로 알고 있습니다.

음력의 대략적 규칙을 설명하겠습니다. 음력은 달의 운행을 기준으로 하는데 달은 보름에서 다음 보름까지 약 29.53일 걸립니다. 따라서 음력은 29일과 30일 번갈아 들어 오게 됩니다. 음력 12달은 12달 x 29.5 =354일이 되므로 태양의 운행 (지구공전)에 다른 1년 보다 약 11일 적게됩니다. 이는 3년이면 33일로 약 1달의 차이가 생깁니다. 이 차이는 계절의 변화를 줄 정도이므로 계절의 변화 (태양의 운행)과 음력을 맞추기 위하여 윤달을 도입하게 됩니다. 대략 3년에 1번의 윤달을 두게 되는데 (정확하게는 18.7년에 7번) 이를 치윤법이라 합니다. 동양의 각종 역법은 1년의 길이를 얼마로 정하여 윤달을 어떻게 두느냐를 정하는 것입니다. 전통적으로는 어떤 역에서 나타난 일식이나 월식, 동지 시각 등의 오차를 측정한 다음 윤달을 두거나 1달과 1년의 길이를 조절하는 치윤법을 정하게 되는데, 현재에는 1년의 길이는 정확하게 정해져있고, 달과 태양의 위치를 오차 범위에서 정확하게 계산하여 예측할 수 있으므로 24절기의 시각을 정확하게 계산할 수 있습니다. 간혹 민간 전승의 전통적인 달력과 한국천문연구원에서 발행하는 음력간에 차이가 나타나게 되는 것은 이와 같은 이유에서입니다. 천체의 운행 입장에서 보면 우리 나라의 음력인 한국천문연구원에서 발표하는 역이 더 정확하다고 할 수 있습니다.

우리 나라 윤달의 치윤법은 전통적으로 우수, 경칩, 춘분...등의 24절기를 이용합니다. 24절기는 태양의 운행을 황경에 따라 15도 간격으로 배치한 것으로 약 15일 간격으로 되어 있습니다. 24절기는 다시 12절기 (입춘,경칩,청명 ..) 와 12중기 (우수, 춘분, 곡우 ...)로 나누어지며 대략 1달에 하나의 중기와 하나의 절기가 들어가게 됩니다. 이중 중기는 달의 이름을 결정하는 것으로 만약 우수가 들어 있는 음력 월은 1월, 춘분은 2월, 곡우는 3월 이렇게 이름이 붙게 됩니다. 그런데 음력은 29일과 30일이 있으므로 경우에 따라서는 중기가 없는 달이 존재하게 됩니다. 이런 달을 윤달로 두며 전달의 이름을 쓰게 됩니다. 즉 중기가 없는 무중월을 전달 이름에 윤달을 두게 됩니다. 이를 무중 치윤법이라 합니다. 만약 이런 달 (무중월)이 1년에 2회이면 앞의 달만 윤달을 두게 됩니다.

그런데 아이러니하게도 이 사이트에서 음력/양력 변환을 웹상에서 제공합니다.

http://www.kasi.re.kr/Knowledge/convert_monthly.aspx

FAQ에서는 특별한 규칙이 없다고 하면서도 사이트에서는 음력/양력 변환을 제공해주는 것은 도대체 무슨 의도일까요.

Quote:
음력과 양력의 변환은 어떤 규칙성이 있는 것이 아닙니다.

정부산하기관이란 곳이 하는 일들이란 정말...(ㅡㅡ;)

snowall의 이미지

Quote:
대개는 수 십 년간의 음양력 자료를 데이터 베이스로 만들어 입력에 대한 출력을 만드는 것이 가장 간단한 프로그램입니다.

이 방법을 이용해서 만든 것 같은데요...
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

오호라의 이미지

그래서, 그쪽 DB를 반강제(?)로 백업중입니다.

1391-02-05 ~ 2050-12-31 까지의 양력->음력 변환을 지원하네요.

일단 백업이 끝나면 일반적인 계산법으로 양력->음력을 변환해서 실제 그쪽 DB와 동일한지 볼려고 합니다.

동일하다보면 거짓부렁일테고, 틀리다면 사실이겠죠. ^^;

Hello World.

36311의 이미지

실제로 계산을 하는 것이 아니라 관측된 데이터를 사용하는 변환기겠지요.

미래 혹은 관측을 시작하기 이전의 날짜는 예측된 값이겠지요. 아마 한 10년 후에 다시 실행시키면 값이 바뀔 겁니다.

Firefox에서는 볼 수 없는게 아쉽네요.

* 포럼 주제와 무관한 신변잡기를 반복해서 올리지 맙시다.
* 질문 게시판 만이라도 익명 글쓰기를 막아야 한다고 생각합니다.

ai의 이미지

음/양력의 변환, 절기의 계산 등에는 생각보다 복잡한 천문학 이론 및 관측이 필요합니다. 시중에 돌아다니는(?) 음/양력 변환 프로그램은 구조가 거의 동일합니다. 음력의 큰달/작은달, 윤큰달/윤작은달 정보를 가지고 있으면서, 특정 시점의 음/양력을 매치한 것을 기준으로 현재 날짜의 음력 날짜를 계산하는 것입니다. 따라서 프로그램의 정확도는 내부에서 정의하고 있는 음력 정보에 좌우하도록 되어 있습니다.

그래서 c, perl 등으로 작성된 몇몇 소스를 구해 검증을 해 보았었는데, 결과가 프로그램마다 미묘하게 달랐던 탓으로.. 결국 스스로 perl 라이브러리를 만들어 사용했던 기억이 있습니다. 그때 사용했던 자료원이 한국천문연구원의 음양력 대조표였고요. 애당초 음/양력의 변환, 음력간지의 표현, 월령이나 일출/일몰시간 등 역법과 관련된 모든 정보는 해당 기관에서 발간하는 역서를 기준으로 하는 것이 맞습니다.

참고로 당시 사용했던 음력 정보를 올려봅니다. 형식은 아래와 같습니다.
음력 1583년은 총 384일로, 큰달은 2, 4, 7, 9, 10, 11, 12월, 작은달은 1, 윤2, 3, 5, 6, 8월이 됩니다.

* URL : http://cizz.net/pub/1583-2050-parse.txt

년도: 각 음력달의 길이 x 12개 : 해당 음력년도의 총 일수(윤달길이)     *표시는 윤달이 들어가는 달입니다
1583 :  29  30* 29  30  29  29  30  29  30  30  30  30 : 384(29)
1584 :  29  30  29  29  30  29  29  30  29  30  30  30 : 354
1585 :  29  30  30  29  29  30  29  29  30* 30  30  29 : 383(29)
1586 :  30  30  29  30  29  30  29  29  30  29  30  29 : 354

제가 해당 페이지를 긁어오던 당시에는 1583~2050년 기간의 데이터가 제공되었는데, 지금은 양력 1391년부터 조회가 가능하군요. (이제 조선시대 이후가 모두 커버되겠네요.)

그리고 여기부터는 여담입니다만.. 그때 만들었던 프로그램은 복날 계산을 하기 위한 것이었는데, 복날은 음력과 절기를 동시에 고려하지 않으면 찾을 수 없습니다. 초복은 하지 이후 특정 조건의 음력날짜.. 이런식이기 때문입니다. 따라서 천문연구원의 음/양력 변환 자료만으로는 부족하고 -_-; 황경을 계산하여 절기에 해당하는 날짜를 찾아야만 합니다. 그런데 이게 좀 많이 복잡하다 보니.. 결국 오차범위(몇 시간) 이내에서 절기를 얻을 수 있는 정도로 계산하도록 타협을 했고, 타협을 하다보니..

이 무슨 삽질을 하고 있는건가 -_-;

..하는 생각이 들더군요. 정교한 알고리듬으로 완벽하게 기술할 수 있는 정도의 작업이 아니기에 역에 관한 사항만 전담하는 국가 기관이 존재할 정도인데 말이죠.

결론은 필요한 범위 내에서 원하는 정보를 쏙쏙 뽑아가는 저 천문연구원의 웹페이지가 가장 효율적인 구조라는 것입니다. ^~^;

--
War doesnt determine whos right, just whos left.

War doesnt determine whos right, just whos left.

오호라의 이미지

초, 중, 말복은 항상 달력보고 알았는데...

실제로 계산하는게 그리 녹녹치 않은 일이었군요. ^^;

ACM ICPC문제로도 손색이 없을듯...ㅋㅋㅋ

문제 : 현재 년도부터 입력되는 년도까지의 초, 중, 말복의 날짜를 출력하시오.
입력 : 2018
출력 : ㅋㅋㅋ

Hello World.

오호라의 이미지

한 18시간정도 걸렸네요.

어떤 개발자라도 언젠가는 요긴하게 쓰리라고 봅니다. ^^;

URL : http://sqab.tistory.com/3

ps. 저작권문제는 없겠죠. ^^;

Hello World.

codebank의 이미지

링크된 자료가 받아지질 않는군요. 티스토리에 가입을 해야만 받을 수 있는건가요??? :-)
------------------------------
좋은 하루 되세요.

------------------------------
좋은 하루 되세요.

lifthrasiir의 이미지

제가 비슷한 방법으로 백업한 데이터를 토대로 만든 파이썬 라이브러리가 있습니다.

zepinos의 이미지

결국 음력에는 답이 없습니다.

미래...야...어짜피 위의 기구가 있으므로 문제가 안됩니다. 해마다 발표를 할테니까요. (현재 중국과 음력 날짜가 하루인가 벌어져 있을 겁니다)

하지만, 과거는 어떨까요.

예전에 실록과 그 외의 한국한 관련 프로젝트를 진행하면서...

과거의 음력 날짜를 도저히 제대로 찾아낼 수 없어서...

무엇을 기준으로 할까 고민 많이 했습니다. -_-;;;

실제 현재 서비스 되고 있는 실록에 보면 양음력이 모두 표시되는데, 100% 정확한게 아니거든요. -_-;;;

조선시대도 이러한데 그 이전 시대는...암울하네요.

산식이 있으면 참 좋겠지만...아쉽게도 없습니다. 있으면 저 좀 알려주세요.

제가 참여했던 프로젝트(그래봐야 저혼자 만들거나 했지만)에 보고하면 아주 환영할 겁니다.

오호라의 이미지

세종대왕(김상경)님께서 장영실(이천희)을 중국으로 보냈겠습니까...

ㅇㅇ

Hello World.

lifthrasiir의 이미지

과거의 음력 날짜는 어느 경도를 기준으로 했느냐에 따라 하루 정도 차이가 있어서 때려 맞춰야 한다는 얘기를 본 것 같습니다. -_-; 당시에는 timezone 같은 거 없이 지역 평균시(local mean time)를 썼을 테니까요.

astronux의 이미지

시중에 만세력이라는 책이 판매되고 있습니다.
이 책에는 한국천문연구원에서 계산한 2050년까지 음양력 자료들이 수록되어 있습니다.
그 만세력의 내용을 그대로 DB로 만들고, 그걸 보여주는 겁니다.
물론, 책 내용을 그대로 타이핑 한 것은 아니고, 천문연구원에서 음양력 자료를 해당 출판사로 넘겨준 것이므로,
음양력 자료가 일목요연하게 파일로 정리가 되어 있었기 때문에 가능한 일이었습니다.

그 설명글에서와 같이, 음력을 알아내는 일정한 규칙은 없습니다.
그리고, zepinos님의 말씀처럼, 현재 서비스 되는 각종 실록에 적혀 있는 음양력자료는 실제 당시의 음양력자료와 다를 수 있습니다.
왜냐하면, 실록 중간 중간에 빠진 음력 자료들은 그 앞과 뒤에 나오는 음력자료들과 과거 달의 운행자료를 추측해서 만들기 때문입니다.

Astronomy+Linux

Astronomy+Linux

aero의 이미지

현재 한국천문연구원이 지원하는 날짜 범위를 모두 지원합니다.

CPAN에 올렸습니다.
http://search.cpan.org/dist/Date-Korean/

자세한 내용은 여기를 참고.

codebank의 이미지

문서의 예제 출력부분이 깨져보이네요.

혹시 한글 모드때문인가해서 이것저것 바꿔봐도 그대로여서 소스를보니 65533으로 통일 되어있는
것을보니 작성하실때 무언가 변환된듯 보이는데...(자세한건 잘 모르겠네요.)

본문중에 율리시스역과 그레고리언역 부분은 대부분 잊어버리 수 있는 부분인데 꼼꼼하게 처리
하셨네요.

그나저나 그러한 처리가 수학적으로 가능할 것도 같긴한데 누가 그런것을 방정식으로 풀어보는
사람이 없을려나 모르겠네요. :-)
------------------------------
좋은 하루 되세요.

------------------------------
좋은 하루 되세요.

aero의 이미지

> 문서의 예제 출력부분이 깨져보이네요.

문서가 깨지는 건 CPAN에 올리면 소스코드내의 Pod(Perl 내부 문서포멧)부분을 뽑아서
문서를 만드는데 제가 올린 소소는 utf-8 인코딩에 사용인코딩을 제대로 지정해줬으나
CPAN의 인덱싱과정에서 문제가 있어 좀 깨진듯합니다.
http://search.cpan.org/perldoc?Date::Korean 에 보면 윗쪽에 Source 라는 링크를
누르고 페이지 인코딩을 utf-8으로 바꾸면 한자와 한글이 제대로 보일겁니다.

>본문중에 율리시스역과 그레고리언역 부분은 대부분 잊어버리 수 있는 부분인데 꼼꼼하게 처리하셨네요.

이건 제가 모듈을 만들고 검증절차를 거치면서 자연스럽게 확인하게 됐습니다. :)

>그나저나 그러한 처리가 수학적으로 가능할 것도 같긴한데 누가 그런것을 방정식으로 풀어보는 사람이 없을려나 모르겠네요. :-)

그 오차한계를 넘지 않는 적용범위가 어떻게 될지는 보장하지 못하지만. 수학적으로 어느정도 처리가 가능합니다. CPAN에도 이런 계산을 통해서 음력을 지원하는 http://search.cpan.org/perldoc?DateTime::Calendar::Chinese 같은 모듈이 있습니다만 테스트 해보니 계산시간도 너무 오래걸리고 어느 범위까지 적용될 수 있는지를 가늠할 수도 없고 오차가 발생하는 것을 발견하고 그냥 미리 정확하게 계산된 테이블을 이용하도록 만들었습니다.
일례로 성도 라는 별자리 프로그램( http://blueedu.dothome.co.kr/ )을 보시면 이런 음양력 변환을 관련 천문자료들을 토대로 계산하여 변환하는 달력프로그램을 만드신 분도 있습니다.

김도현의 이미지

제사 축문 쓸 때 항상 절에서 나온 달력을 찾아보고 써야 했는데 이거 간편한 게 아주 좋군요.
감사합니다.

atie의 이미지

가끔씩 음력을 볼 필요가 있었는데 간편하게 명령행에서 볼 수 있어 좋네요. 고맙습니다.

혹시, 아치에서 펄 모듈 패키지로 설치하실 분은 community repo의 perl-datetime을 설치한 후 첨부파일을 풀어 사용하세요. PKGBUILD 파일들도 포함하였습니다.
----
I paint objects as I think them, not as I see them.
atie's minipage

댓글 첨부 파일: 
첨부파일 크기
Binary Data pm-date-korean.tar.gz51.98 KB

----
I paint objects as I think them, not as I see them.
atie's minipage

kohyc의 이미지

실제 해와 달의 위치를 정밀하게 계산해서 만든 Perl과 pascal(Delphi)소스가 있습니다.

http://cgi.chol.com/~kohyc/calendar/index.cgi

aero의 이미지

해당 싸이트도 개인적으로 각종자료를 토대로 오차를 줄인 것이지 공식적으로 인정받을 수 있는 결과는 아닙니다.
간단한 예로 위 싸이트 만세력과 한국 천문연구원 음양력 변환 서비스 http://www.kao.re.kr/Knowledge/convert_monthly.aspx
으로 1582년 10월달 달력을 비교해보시면 양력 1582년 10월 5일 ~ 10월 14일 사이는 율리시스력에서 그레고리력으로 바뀌면서 존재하지 않는 날짜이나. 만세력에서는 날짜가 그대로 나오고 그 결과 1582년 10월 4일 이전의 음력날짜와 일진도 다 틀린 값이 나옵니다. 그리고 미래 어느 해 까지 유효한지도 확실히 표시 못하고 있죠 이것이 계산으로 인한 한계입니다.

역법과 역서는 국가기관에서 공인한 것이 기준이 됩니다.

김정균의 이미지

옛글이지만, 검색하다가 걸려서 ..

진짜 만세력에서 1582년 10월 5일 ~ 10월 14일가 존재하는 이유는, 모든 표기를 그레고리력 기준으로 표기를 하기 때문입니다. 즉, 그 이전의 데이터 즉 그레고리력이 존재하지 않던 날까지도 그레고리력으로 강제 출력을 하기 때문입니다.

율리우스 적일을 이용하여 변환을 하면, 거의 맞아 떨어집니다. 아래 san2님의 글처럼 1~2일의 오차와 윤달의 오차가 발생하기는 하지만, 전혀 아니다라고 할 정도는 아닙니다. 다만, 미래에 대해서는 어느해까지 유효하다라는 것은 지적하신 대로 한계가 맞습니다만, 대충 현재 천문 과학 연구원에서 계산해 놓은 범위 까지는 크게 틀어질 정도의 차이를 보이지는 않네요.

이에 대해서는 제가 진짜 만세력을 php로 포팅(https://oops.org/project/manse/)을 하면서, 1582.10.14 이전을 율리우스력을 변환하여 출력을 하게 하며 검증을 해 본 것입니다. (이 검증이 변환이 정확하다는 의미가 아니라, 율리우스력과 비슷하게 맞아 떨어진다는 것을 의미합니다.)

san2의 이미지

늦은 감은 있지만,
몇 년 전에 천문계산(천문/역법)에 관심이 있어서 그쪽으로 좀 공부를 했었는데
음력/양력변환은 간단한 수식으로 계산되질 않습니다.
천체의 운행을 기반으로 하는 역학/역법이기 때문이죠.

위의 댓글에서 "진짜 만세력" 소스를 오래전에 분석해봤는데 (평균에 의한) 근사식을 이용한 방법입니다.
즉 근 100년 전후에는 비교적 정확하게 맞을 수는 있지만 아무 먼 과거에는 많이 어긋날 수 있다는 겁니다.
그 부분에 대해서 김동빈 선생님이 지적한 내용을 본 기억이 나네요.

...
아래 소스는 기존 data 를 DB화 하지 않고 근사식으로 계산한 값을 날짜 약간 보정한 프로그램입니다.

데모페이지
http://linuxchannel.net/gaggle/lunar.php
http://linuxchannel.net/gaggle/solar.php

소스 프로그램
http://ftp.linuxchannel.net/devel/php_solar/
http://ftp.linuxchannel.net/devel/php_lunar/

관련 내용(사용법)
http://linuxchannel.net/docs/lunar.txt
http://linuxchannel.net/docs/solar-24terms.txt

기타
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=39302
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=38233
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=22788

그외 먼 과거의 달력도(^.^)
http://ftp.linuxchannel.net/devel/php_calendar/

재가입..T.T

오호라의 이미지

감사합니다.

저도 예전에 백업해두었던 데이터셋하고 비교해봐야겠네요. ^^

Hello World.