본문 바로가기
tip

음력 to 양력 날짜변환

by jkoogi 2023. 9. 22.
반응형

공휴일 달력표시정보 구성이 필요해서 음력 날짜를 양력 날짜로 변환하는 작업이 필요했다. 

 

인터넷을 찾아보니 몇가지 안을 도출하게 되었다. 

1. ibm에서 제공한 중국음력 유틸리티 라이브러리 참조

 - com.ibm.icu.util.ChineseCalendar 

 > 장점 : 범용적으로 많이 사용한 듯(표준프레임워크에서도 해당라이브러리를 사용하여 기능 구현) 하여 관려 자료가 많음

 > 단점 : 중국 음력과 한국 음력의 차이로 간혹 음력일자의 오차 발생 - 치명적 결함으로 비추

2. 공공API 조회

 - 한국천문연구원에서 제공하는 양력, 음력 매핑정보 조회 API를 이용하여 날짜조회

 > 장점 : 가장 정확하고 다른 기능에 부담없이 사용 가능

 > 단점 : 외부연계 필요, API 변경사항 현행화 관리 필요

3. 변환로직 직접 구현

 - 한국천문연구원에서 제공하는 음력일자를 기준으로 메타데이터를 구성하여 매핑로직 구현

 > 장점 : 이슈에 적극적으로 대응할 수 있다. (현실적 대안 : 관련 소스를 참조하여 디버깅 후 사용)

 > 단점 : 로직구현 및 천문연구원 메타정보 변경시 현행화 필요

4. 매핑정보 수동관리

 - 천문연구원에서 제공하는 날짜 대비 매핑일자를 메타정보로 관리 (테이블, 공통코드 등)

 > 장점 : 구현 및 관리에 가장 부담이 적음

 > 단점 : 매핑정보 관리 및 범용성이 떨어짐 (등록한 날짜만 사용가능)

 

서비스에서는 4번을 적극적으로 제안했지만, 3번이 현실적인 대안으로 보인다. 

* [참고1] 3번 검토자료

https://github.com/corestone/jsphelper3/blob/master/src/chk/jsphelper/util/LunarCalendarUtil.java

 - 음력 20330815 날짜 조회시 0908일이 조회되어야 하는데, 1007 로 응답된는 버그 확인
 > 80093aa

/* 2031 ~ 2040 까지 */
{ 2, 1, 5, 2, 1, 2, 2, 1, 2, 1, 2, 1, 384 }, // 2000년
{ 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 355 }, // 2000년
{ 1, 2, 1, 1, 2, 1, 5, 2, 2, 2, 1, 2, 384 }, // 2000년 <-해당 메타정보
{ 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 384 }, // 2000년 <-수정 메타정보

* [참고2] 아래 블로그의 소스도 테스트한 결과 동일한 날짜에서 동일한 버그 확인

 - 아마 천문연구원에서 제공하던 메타정보가 변경된게 아닐까?

https://billcorea.tistory.com/113

 

안드로이드 앱 만들기 : 음력을 양력으로 변환 하기

예전에 어떤 앱을 만들기 할 때 사용했던 음력 변환 하는 소스를 어딘가에서 찾았던 거 같은데... 다시 한번 기억해 보기 위해서 적어 보기로 했다. https://billcorea.tistory.com/4 구글로간 음력 설명서

billcorea.tistory.com

 

* [참고3] 한국의 양력과 중국의 양력이 다를 수 있어서 ibm 라이브러리 사용을 제외하게된 참고자료

https://blog.naver.com/birdparang/221445233118

 

[자바] 양력에서 음력 변환 - ChineseCalendar 클래스가 맞지 않는 이유, 한국과 중국의 음력 차이

((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0; 위 코드는 양력의 윤년(2월 29일...

blog.naver.com

 

결론.

[참고1] 자료의 버그를 수정하여 유틸로 사용

 - 테스트 데이터 구성 : 천문연구원의 2023~2050 음력 공휴일(설날, 부처님오신날, 추석) 매핑자료 검색

 > https://astro.kasi.re.kr/life/pageView/8

(행활천문관 > 음양력변환계산 > 특정음력일찾기 : 2023~2050 음력일자 조회 결과)

 

음양력변환계산 | 생활천문관 | 천문우주지식정보

양력 날짜를 입력하여 대응하는 음력 날짜 확인 ※ 입력범위 : -59년 02월 13일 ~ 2050년 12월 31일 --> ※ 1582년 로마 교황 그레고리우스 13세는 율리우스력을 그레고리력으로 개정함에 따라 (율리우스

astro.kasi.re.kr

 

 

test 메타정보.txt
0.01MB

반응형