[Python] 파이썬의 음력 양력 생일 날짜 변환을 위해 KoreanLunarCalendar 모듈에 대해 알아봅니다.
매년 음력생일을 양력으로 기록하다보니 이것 역시 귀찮이즘이 오네요. 그래서 라이브러리를 활용해보기로 합니다. 음력을 양력으로 그리고 양력을 음력으로 변환을 용이하게 해주는 라이브러리 하나를 소개합니다. 라이브러리 모듈이름은 KoreanLunarCalendar입니다. 이 라이브러리는 한국 음력을 그레고리력으로 변환하는 라이브러리입니다. 한국 달력과 중국 달력은 같은 음력이지만 날짜가 다릅니다. 이 라이브러리는 KARI (한국 천문 과학 연구원)의 데이터를 토대로 생성된 것으로 보입니다. 라이브러리를 까보면 변환를 지원하는 기간을 확인할 수 있습니다.
class KoreanLunarCalendar(object) :
KOREAN_LUNAR_MIN_VALUE = 13910101
KOREAN_LUNAR_MAX_VALUE = 20501118
KOREAN_SOLAR_MIN_VALUE = 13910205
KOREAN_SOLAR_MAX_VALUE = 20501231
음력 변환은 1391년 1월 1일 부터 2050년 11월 18일까지 지원합니다.
모듈을 사용하기 위해 명령프롬프트를 열고 pip install korean_lunar_calendar 명령어를 실행하여 라이브러리를 설치합니다.
C:Usersilike>pip install korean_lunar_calendar
Collecting korean_lunar_calendar
Downloading korean_lunar_calendar-0.2.1-py3-none-any.whl (8.0 kB)
Installing collected packages: korean-lunar-calendar
Successfully installed korean-lunar-calendar-0.2.1
WARNING: You are using pip version 20.3.3; however, version 21.0.1 is available.
You should consider upgrading via the 'c:usersilikeappdatalocalprogramspythonpython39python.exe -m pip install --upgrade pip' command.
음력을 양력으로 변환하는 코드에 대해 알아봅니다. 음력 일자를 입력받아 처리하는 setLunarDate()함수를 사용합니다. 이 함수는 4개의 인자를 받아서 처리합니다. 년 , 월, 일 그리고 윤달여부(isIntercalation)입니다. 영어 사전을 검색해보니 intercalation이 윤달이네요.
def setLunarDate(self, lunarYear, lunarMonth, lunarDay, isIntercalation) :
isValid = False
if self.__checkValidDate(True, isIntercalation, lunarYear, lunarMonth, lunarDay):
self.lunarYear = lunarYear
self.lunarMonth = lunarMonth
self.lunarDay = lunarDay
self.isIntercalation = isIntercalation and (self.__getLunarIntercalationMonth(self.__getLunarData(lunarYear)) == lunarMonth)
self.__setSolarDateByLunarDate(lunarYear, lunarMonth, lunarDay, isIntercalation)
isValid = True
return isValid
다음은 음력을 양력으로 변환하는 예제 코드입니다.
from korean_lunar_calendar import KoreanLunarCalendar
calendar = KoreanLunarCalendar()
calendar.setLunarDate(2021, 2, 23, False)
print("음력 2021년 2월23일은 양력으로 ", calendar.SolarIsoFormat(), "입니다.")
print(calendar.getGapJaString())
print(calendar.getChineseGapJaString())
[실행결과]
음력 2021년 2월23일은 양력으로 2021-04-04 입니다.
신축년 신묘월 임오일
辛丑年 辛卯月 壬午日
다음은 양력을 음력으로 변환하는 예제 코드입니다.
from korean_lunar_calendar import KoreanLunarCalendar
calendar = KoreanLunarCalendar()
calendar.setSolarDate(2021, 2, 23)
print("양력 2021년 2월23일은 음력으로 ", calendar.LunarIsoFormat(), " 입니다.")
print(calendar.getGapJaString())
print(calendar.getChineseGapJaString())
[실행결과]
양력 2021년 2월23일은 음력으로 2021-01-12 입니다.
신축년 경인월 임인일
辛丑年 庚寅月 壬寅日
네이버 달력정보 – 양음력변환
네이버의 달력정보에서 양음력변환 역시 가능합니다.
한국 천문연구원 천문우주지식정보 – 음양력변환계산
한국 천문연구원 천문우주지식정보 사이트에서도 동일하게 양력을 음력으로, 음력을 양력으로, 그리고 특정 음력일 찾기, 율리우스적일을 음/양력으로 등의 변환해주는 기능을 사용할 수 있습니다.
공공데이터포털(DATA.GO.KR) – 오픈 API 음양력 정보
공공데이터포털(DATA.GO.KR)에서 제공하는 오픈 API를 사용해서 음양력 정보를 받아 올 수 있습니다. OpenAPI 상세 정보 및 활용신청 방법은 다음 링크를 참고하세요.
www.data.go.kr/data/15012679/openapi.do
다음과 같은 메타데이터로 받아 볼 수 있습니다.
{"name":"음양력 정보"
,"description":"(천문우주정보)음력일정보, 양력일정보, 특정음력일정보
, 율리우스적일정보를 조회하는 서비스 입니다."
,"url":"https://www.data.go.kr/data/15012679/openapi.do"
,"keywords":["음력 변환","양력 변환","율리우스 적일"]
,"license":"https://data.go.kr/ugs/selectPortalPolicyView.do"
,"creator":{"name":"한국천문연구원"
,"contactPoint":{"contactType":"천문전산융합센터"
,"telephone":"+82-0428652188"
,"@type":"ContactPoint"}
,"@type":"Organization"}
,"distribution":[{"encodingFormat":"XML"
,"contentUrl":"https://www.data.go.kr/data/15012679/openapi.do"
,"@type":"DataDownload"}]
,"@context":"https://schema.org","@type":"Dataset"}
샘플코드로 Java, Javascript, C#, PHP, Curl, Object-C, Python, Nodejs 언어로 제공됩니다.
파이썬 샘플 코드는 다음과 같습니다.
# Python 샘플 코드 #
from urllib2 import Request, urlopen
from urllib import urlencode, quote_plus
url = 'http://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getLunCalInfo'
queryParams = '?' + urlencode({ quote_plus('ServiceKey') : '서비스키', quote_plus('solYear') : '2015', quote_plus('solMonth') : '09', quote_plus('solDay') : '22' })
request = Request(url + queryParams)
request.get_method = lambda: 'GET'
response_body = urlopen(request).read()
print response_body
아주 훌륭한 라이브러리를 찾았으니, 이 라이브러리를 활용하여 업무자동화 모듈을 구현해보면 되겠죵? ㅎㅎ
음력양력에 대한 좀 더 심오한 정보가 필요하시다면 아래 링크를 참고하세요.저는 말리고 싶네요
www.math.snu.ac.kr/~kye/others/lunar.html