Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-korean-lunar-calendar for
openSUSE:Factory checked in at 2022-10-12 18:25:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-korean-lunar-calendar (Old)
and /work/SRC/openSUSE:Factory/.python-korean-lunar-calendar.new.2275
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-korean-lunar-calendar"
Wed Oct 12 18:25:47 2022 rev:2 rq:1010134 version:0.3.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-korean-lunar-calendar/python-korean-lunar-calendar.changes
2020-08-17 14:40:35.982587718 +0200
+++
/work/SRC/openSUSE:Factory/.python-korean-lunar-calendar.new.2275/python-korean-lunar-calendar.changes
2022-10-12 18:27:33.066067559 +0200
@@ -1,0 +2,6 @@
+Wed Oct 12 03:38:09 UTC 2022 - Yogalakshmi Arunachalam <[email protected]>
+
+- Update to version 0.3.1
+ * changed start year to support conversion from 1391 to 1000
+
+-------------------------------------------------------------------
Old:
----
korean_lunar_calendar-0.2.1.tar.gz
New:
----
korean_lunar_calendar-0.3.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-korean-lunar-calendar.spec ++++++
--- /var/tmp/diff_new_pack.BDmekw/_old 2022-10-12 18:27:33.658068863 +0200
+++ /var/tmp/diff_new_pack.BDmekw/_new 2022-10-12 18:27:33.662068871 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-korean-lunar-calendar
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define modname korean_lunar_calendar
Name: python-korean-lunar-calendar
-Version: 0.2.1
+Version: 0.3.1
Release: 0
Summary: Korean Lunar Calendar
License: MIT
++++++ korean_lunar_calendar-0.2.1.tar.gz -> korean_lunar_calendar-0.3.1.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/korean_lunar_calendar-0.2.1/LICENSE
new/korean_lunar_calendar-0.3.1/LICENSE
--- old/korean_lunar_calendar-0.2.1/LICENSE 2020-04-14 16:29:58.000000000
+0200
+++ new/korean_lunar_calendar-0.3.1/LICENSE 2022-09-16 10:14:42.000000000
+0200
@@ -1,19 +1,19 @@
-Copyright (c) 2018-2020 Jinil Lee <[email protected]>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+Copyright (c) 2018-2020 Jinil Lee <[email protected]>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/korean_lunar_calendar-0.2.1/MANIFEST.in
new/korean_lunar_calendar-0.3.1/MANIFEST.in
--- old/korean_lunar_calendar-0.2.1/MANIFEST.in 2020-04-14 16:29:58.000000000
+0200
+++ new/korean_lunar_calendar-0.3.1/MANIFEST.in 2022-09-16 10:14:42.000000000
+0200
@@ -1 +1 @@
-include README.rst LICENSE
+include README.rst LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/korean_lunar_calendar-0.2.1/PKG-INFO
new/korean_lunar_calendar-0.3.1/PKG-INFO
--- old/korean_lunar_calendar-0.2.1/PKG-INFO 2020-04-14 16:35:49.317026600
+0200
+++ new/korean_lunar_calendar-0.3.1/PKG-INFO 2022-09-16 12:44:48.978372300
+0200
@@ -1,105 +1,101 @@
-Metadata-Version: 1.2
-Name: korean_lunar_calendar
-Version: 0.2.1
-Summary: Korean Lunar Calendar
-Home-page: https://github.com/usingsky/korean_lunar_calendar_py
-Author: Jinil Lee
-Author-email: [email protected]
-Maintainer: Jinil Lee
-Maintainer-email: [email protected]
-License: MIT
-Description: korean\_lunar\_calendar\_py
- ===========================
-
- ?????? ????????? ??????
-
- Overview
- ^^^^^^^^
-
- Here is a library to convert Korean lunar-calendar to Gregorian
- calendar.
-
- Korean calendar and Chinese calendar is same lunar calendar but have
- different date.
-
- This follow the KARI(Korea Astronomy and Space Science Institute)
-
- ?????? ????????? ?????? (????????????????????? ??????) - ????????????
?????? ?????????
-
- ?????? ????????? 1391??? 1??? 1??? ?????? 2050??? 11??? 18?????????
??????
-
- ::
-
- Gregorian calendar (1391. 2. 5. ~ 2050. 12. 31) <--> Korean
lunar-calendar (1391. 1. 1. ~ 2050. 11. 18)
-
- Install
- ^^^^^^^
-
- pip install korean\_lunar\_calendar
-
- To use
- ^^^^^^
-
- (0) import module
-
- .. code:: python
-
- from korean_lunar_calendar import KoreanLunarCalendar
-
- (1) Korean Solar Date -> Korean Lunar Date (????????-> ??????)
-
- .. code:: python
-
- calendar = KoreanLunarCalendar()
- # params : year(???), month(???), day(???)
- calendar.setSolarDate(2017, 6, 24)
- # Lunar Date (ISO Format)
- print(calendar.LunarIsoFormat())
- # Korean GapJa String
- print(calendar.getGapJaString())
- # Chinese GapJa String
- print(calendar.getChineseGapJaString())
-
- ::
-
- [Result]
- 2017-05-01 Intercalation
- ????????? ????????? ????????? (??????)
- ????????? ????????? ????????? (??????)
-
- (2) Korean Lunar Date -> Korean Solar Date (????????-> ??????)
-
- .. code:: python
-
- # params : year(???), month(???), day(???),
intercalation(????????????)
- calendar.setLunarDate(1956, 1, 21, False)
- # Solar Date (ISO Format)
- print(calendar.SolarIsoFormat())
- # Korean GapJa String
- print(calendar.getGapJaString())
- # Chinese GapJa String
- print(calendar.getChineseGapJaString())
-
- ::
-
- [Result]
- 1956-03-03
- ????????? ????????? ?????????
- ????????? ????????? ?????????
-
-
-Keywords: calendar,korean,lunar
-Platform: UNKNOWN
-Classifier: Development Status :: 3 - Alpha
-Classifier: Intended Audience :: Developers
-Classifier: Intended Audience :: End Users/Desktop
-Classifier: Topic :: Software Development :: Libraries
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
+Metadata-Version: 2.1
+Name: korean_lunar_calendar
+Version: 0.3.1
+Summary: Korean Lunar Calendar
+Home-page: https://github.com/usingsky/korean_lunar_calendar_py
+Author: Jinil Lee
+Author-email: [email protected]
+Maintainer: Jinil Lee
+Maintainer-email: [email protected]
+License: MIT
+Keywords: calendar,korean,lunar
+Classifier: Development Status :: 3 - Alpha
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: End Users/Desktop
+Classifier: Topic :: Software Development :: Libraries
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 3
+License-File: LICENSE
+
+korean\_lunar\_calendar\_py
+===========================
+
+?????? ????????? ??????
+
+Overview
+^^^^^^^^
+
+Here is a library to convert Korean lunar-calendar to Gregorian
+calendar.
+
+Korean calendar and Chinese calendar is same lunar calendar but have
+different date.
+
+This follow the KARI(Korea Astronomy and Space Science Institute)
+
+?????? ????????? ?????? (????????????????????? ??????) - ???????????? ??????
?????????
+
+?????? ????????? 1000??? 01??? 01??? ?????? 2050??? 11??? 18????????? ??????
+?????? ????????? 1000??? 02??? 13??? ?????? 2050??? 12??? 31????????? ??????
+
+::
+
+ Gregorian calendar (1000-02-13 ~ 2050-12-31) <--> Korean lunar-calendar
(1000-01-01 ~ 2050-11-18)
+
+Install
+^^^^^^^
+
+pip install korean\_lunar\_calendar
+
+To use
+^^^^^^
+
+(0) import module
+
+ .. code:: python
+
+ from korean_lunar_calendar import KoreanLunarCalendar
+
+(1) Korean Solar Date -> Korean Lunar Date (????????-> ??????)
+
+ .. code:: python
+
+ calendar = KoreanLunarCalendar()
+ # params : year(???), month(???), day(???)
+ calendar.setSolarDate(2017, 6, 24)
+ # Lunar Date (ISO Format)
+ print(calendar.LunarIsoFormat())
+ # Korean GapJa String
+ print(calendar.getGapJaString())
+ # Chinese GapJa String
+ print(calendar.getChineseGapJaString())
+
+::
+
+ [Result]
+ 2017-05-01 Intercalation
+ ????????? ????????? ????????? (??????)
+ ????????? ????????? ????????? (??????)
+
+(2) Korean Lunar Date -> Korean Solar Date (????????-> ??????)
+
+ .. code:: python
+
+ # params : year(???), month(???), day(???), intercalation(????????????)
+ calendar.setLunarDate(1956, 1, 21, False)
+ # Solar Date (ISO Format)
+ print(calendar.SolarIsoFormat())
+ # Korean GapJa String
+ print(calendar.getGapJaString())
+ # Chinese GapJa String
+ print(calendar.getChineseGapJaString())
+
+::
+
+ [Result]
+ 1956-03-03
+ ????????? ????????? ?????????
+ ????????? ????????? ?????????
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/korean_lunar_calendar-0.2.1/README.rst
new/korean_lunar_calendar-0.3.1/README.rst
--- old/korean_lunar_calendar-0.2.1/README.rst 2020-04-14 15:59:44.000000000
+0200
+++ new/korean_lunar_calendar-0.3.1/README.rst 2022-09-16 12:01:48.000000000
+0200
@@ -1,79 +1,80 @@
-korean\_lunar\_calendar\_py
-===========================
-
-?????? ????????? ??????
-
-Overview
-^^^^^^^^
-
-Here is a library to convert Korean lunar-calendar to Gregorian
-calendar.
-
-Korean calendar and Chinese calendar is same lunar calendar but have
-different date.
-
-This follow the KARI(Korea Astronomy and Space Science Institute)
-
-?????? ????????? ?????? (????????????????????? ??????) - ???????????? ??????
?????????
-
-?????? ????????? 1391??? 1??? 1??? ?????? 2050??? 11??? 18????????? ??????
-
-::
-
- Gregorian calendar (1391. 2. 5. ~ 2050. 12. 31) <--> Korean lunar-calendar
(1391. 1. 1. ~ 2050. 11. 18)
-
-Install
-^^^^^^^
-
-pip install korean\_lunar\_calendar
-
-To use
-^^^^^^
-
-(0) import module
-
- .. code:: python
-
- from korean_lunar_calendar import KoreanLunarCalendar
-
-(1) Korean Solar Date -> Korean Lunar Date (????????-> ??????)
-
- .. code:: python
-
- calendar = KoreanLunarCalendar()
- # params : year(???), month(???), day(???)
- calendar.setSolarDate(2017, 6, 24)
- # Lunar Date (ISO Format)
- print(calendar.LunarIsoFormat())
- # Korean GapJa String
- print(calendar.getGapJaString())
- # Chinese GapJa String
- print(calendar.getChineseGapJaString())
-
-::
-
- [Result]
- 2017-05-01 Intercalation
- ????????? ????????? ????????? (??????)
- ????????? ????????? ????????? (??????)
-
-(2) Korean Lunar Date -> Korean Solar Date (????????-> ??????)
-
- .. code:: python
-
- # params : year(???), month(???), day(???), intercalation(????????????)
- calendar.setLunarDate(1956, 1, 21, False)
- # Solar Date (ISO Format)
- print(calendar.SolarIsoFormat())
- # Korean GapJa String
- print(calendar.getGapJaString())
- # Chinese GapJa String
- print(calendar.getChineseGapJaString())
-
-::
-
- [Result]
- 1956-03-03
- ????????? ????????? ?????????
- ????????? ????????? ?????????
-
+korean\_lunar\_calendar\_py
+===========================
+
+?????? ????????? ??????
+
+Overview
+^^^^^^^^
+
+Here is a library to convert Korean lunar-calendar to Gregorian
+calendar.
+
+Korean calendar and Chinese calendar is same lunar calendar but have
+different date.
+
+This follow the KARI(Korea Astronomy and Space Science Institute)
+
+?????? ????????? ?????? (????????????????????? ??????) - ???????????? ??????
?????????
+
+?????? ????????? 1000??? 01??? 01??? ?????? 2050??? 11??? 18????????? ??????
+?????? ????????? 1000??? 02??? 13??? ?????? 2050??? 12??? 31????????? ??????
+
+::
+
+ Gregorian calendar (1000-02-13 ~ 2050-12-31) <--> Korean lunar-calendar
(1000-01-01 ~ 2050-11-18)
+
+Install
+^^^^^^^
+
+pip install korean\_lunar\_calendar
+
+To use
+^^^^^^
+
+(0) import module
+
+ .. code:: python
+
+ from korean_lunar_calendar import KoreanLunarCalendar
+
+(1) Korean Solar Date -> Korean Lunar Date (????????-> ??????)
+
+ .. code:: python
+
+ calendar = KoreanLunarCalendar()
+ # params : year(???), month(???), day(???)
+ calendar.setSolarDate(2017, 6, 24)
+ # Lunar Date (ISO Format)
+ print(calendar.LunarIsoFormat())
+ # Korean GapJa String
+ print(calendar.getGapJaString())
+ # Chinese GapJa String
+ print(calendar.getChineseGapJaString())
+
+::
+
+ [Result]
+ 2017-05-01 Intercalation
+ ????????? ????????? ????????? (??????)
+ ????????? ????????? ????????? (??????)
+
+(2) Korean Lunar Date -> Korean Solar Date (????????-> ??????)
+
+ .. code:: python
+
+ # params : year(???), month(???), day(???), intercalation(????????????)
+ calendar.setLunarDate(1956, 1, 21, False)
+ # Solar Date (ISO Format)
+ print(calendar.SolarIsoFormat())
+ # Korean GapJa String
+ print(calendar.getGapJaString())
+ # Chinese GapJa String
+ print(calendar.getChineseGapJaString())
+
+::
+
+ [Result]
+ 1956-03-03
+ ????????? ????????? ?????????
+ ????????? ????????? ?????????
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/korean_lunar_calendar-0.2.1/korean_lunar_calendar/__init__.py
new/korean_lunar_calendar-0.3.1/korean_lunar_calendar/__init__.py
--- old/korean_lunar_calendar-0.2.1/korean_lunar_calendar/__init__.py
2020-04-14 16:32:41.000000000 +0200
+++ new/korean_lunar_calendar-0.3.1/korean_lunar_calendar/__init__.py
2022-09-16 12:03:02.000000000 +0200
@@ -1,5 +1,5 @@
-from .korean_lunar_calendar import KoreanLunarCalendar
-
-__version__ = '0.2.1'
-
-__all__ = [ 'KoreanLunarCalendar' ]
+from .korean_lunar_calendar import KoreanLunarCalendar
+
+__version__ = '0.3.1'
+
+__all__ = [ 'KoreanLunarCalendar' ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/korean_lunar_calendar-0.2.1/korean_lunar_calendar/korean_lunar_calendar.py
new/korean_lunar_calendar-0.3.1/korean_lunar_calendar/korean_lunar_calendar.py
---
old/korean_lunar_calendar-0.2.1/korean_lunar_calendar/korean_lunar_calendar.py
2020-04-14 15:59:44.000000000 +0200
+++
new/korean_lunar_calendar-0.3.1/korean_lunar_calendar/korean_lunar_calendar.py
2022-09-16 12:44:25.000000000 +0200
@@ -1,322 +1,355 @@
-# -*- coding: utf-8 -*-
-
-"""
-KoreanLunarCalendar
-Here is a library to convert Korean lunar-calendar to Gregorian calendar.
-Korean calendar and Chinese calendar is same lunar calendar but have different
date.
-This follow the KARI(Korea Astronomy and Space Science Institute)
-@author : [email protected]
-"""
-
-import datetime
-class KoreanLunarCalendar(object) :
- KOREAN_LUNAR_MIN_VALUE = 13910101
- KOREAN_LUNAR_MAX_VALUE = 20501118
- KOREAN_SOLAR_MIN_VALUE = 13910205
- KOREAN_SOLAR_MAX_VALUE = 20501231
-
- KOREAN_LUNAR_BASE_YEAR = 1391
- SOLAR_LUNAR_DAY_DIFF = 35
-
- LUNAR_SMALL_MONTH_DAY = 29
- LUNAR_BIG_MONTH_DAY = 30
- SOLAR_SMALL_YEAR_DAY = 365
- SOLAR_BIG_YEAR_DAY = 366
-
- SOLAR_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 29]
- KOREAN_CHEONGAN = [0xac11, 0xc744, 0xbcd1, 0xc815, 0xbb34, 0xae30, 0xacbd,
0xc2e0, 0xc784, 0xacc4]
- KOREAN_GANJI = [0xc790, 0xcd95, 0xc778, 0xbb18, 0xc9c4, 0xc0ac, 0xc624,
0xbbf8, 0xc2e0, 0xc720, 0xc220, 0xd574]
- KOREAN_GAPJA_UNIT = [0xb144, 0xc6d4, 0xc77c]
-
- CHINESE_CHEONGAN = [0x7532, 0x4e59, 0x4e19, 0x4e01, 0x620a, 0x5df1,
0x5e9a, 0x8f9b, 0x58ec, 0x7678]
- CHINESE_GANJI = [0x5b50, 0x4e11, 0x5bc5, 0x536f, 0x8fb0, 0x5df3, 0x5348,
0x672a, 0x7533, 0x9149, 0x620c, 0x4ea5]
- CHINESE_GAPJA_UNIT = [0x5e74, 0x6708, 0x65e5]
-
- INTERCALATION_STR = [0xc724, 0x958f]
-
- KOREAN_LUNAR_DATA = [
- 0x82c40653, 0xc301c6a9, 0x82c405aa, 0x82c60ab5, 0x830092bd,
0xc2c402b6, 0x82c60c37, 0x82fe552e, 0x82c40c96, 0xc2c60e4b,
- 0x82fe3752, 0x82c60daa, 0x8301b5b4, 0xc2c6056d, 0x82c402ae,
0x83007a3d, 0x82c40a2d, 0xc2c40d15, 0x83004d95, 0x82c40b52,
- 0x8300cb69, 0xc2c60ada, 0x82c6055d, 0x8301925b, 0x82c4045b,
0xc2c40a2b, 0x83005aab, 0x82c40a95, 0x82c40b52, 0xc3001eaa,
- 0x82c60ab6, 0x8300c55b, 0x82c604b7, 0xc2c40457, 0x83007537,
0x82c4052b, 0x82c40695, 0xc3014695, 0x82c405aa, 0x8300c9b5,
- 0x82c60a6e, 0xc2c404ae, 0x83008a5e, 0x82c40a56, 0x82c40d2a,
0xc3006eaa, 0x82c60d55, 0x82c4056a, 0x8301295a, 0xc2c6095e,
- 0x8300b4af, 0x82c4049b, 0x82c40a4d, 0xc3007d2e, 0x82c40b2a,
0x82c60b55, 0x830045d5, 0xc2c402da, 0x82c6095b, 0x83011157,
- 0x82c4049b, 0xc3009a4f, 0x82c4064b, 0x82c406a9, 0x83006aea,
0xc2c606b5, 0x82c402b6, 0x83002aae, 0x82c60937, 0xc2ffb496,
- 0x82c40c96, 0x82c60e4b, 0x82fe76b2, 0xc2c60daa, 0x82c605ad,
0x8300336d, 0x82c4026e, 0xc2c4092e, 0x83002d2d, 0x82c40c95,
- 0x83009d4d, 0xc2c40b4a, 0x82c60b69, 0x8301655a, 0x82c6055b,
0xc2c4025d, 0x83002a5b, 0x82c4092b, 0x8300aa97, 0xc2c40695,
- 0x82c4074a, 0x83008b5a, 0x82c60ab6, 0xc2c6053b, 0x830042b7,
0x82c40257, 0x82c4052b, 0xc3001d2b, 0x82c40695, 0x830096ad,
- 0x82c405aa, 0xc2c60ab5, 0x830054ed, 0x82c404ae, 0x82c60a57,
0xc2ff344e, 0x82c40d2a, 0x8301bd94, 0x82c60b55, 0xc2c4056a,
- 0x8300797a, 0x82c6095d, 0x82c404ae, 0xc3004a9b, 0x82c40a4d,
0x82c40d25, 0x83011aaa, 0xc2c60b55, 0x8300956d, 0x82c402da,
- 0x82c6095b, 0xc30054b7, 0x82c40497, 0x82c40a4b, 0x83004b4b,
0xc2c406a9, 0x8300cad5, 0x82c605b5, 0x82c402b6, 0xc300895e,
- 0x82c6092f, 0x82c40497, 0x82fe4696, 0xc2c40d4a, 0x8300cea5,
0x82c60d69, 0x82c6056d, 0xc301a2b5, 0x82c4026e, 0x82c4052e,
- 0x83006cad, 0xc2c40c95, 0x82c40d4a, 0x83002f4a, 0x82c60b59,
0xc300c56d, 0x82c6055b, 0x82c4025d, 0x8300793b, 0xc2c4092b,
- 0x82c40a95, 0x83015b15, 0x82c406ca, 0xc2c60ad5, 0x830112b6,
0x82c604bb, 0x8300925f, 0xc2c40257, 0x82c4052b, 0x82fe6aaa,
- 0x82c60e95, 0xc2c406aa, 0x83003baa, 0x82c60ab5, 0x8300b4b7,
0xc2c404ae, 0x82c60a57, 0x82fe752d, 0x82c40d26, 0xc2c60d95,
- 0x830055d5, 0x82c4056a, 0x82c6096d, 0xc300255d, 0x82c404ae,
0x8300aa4f, 0x82c40a4d, 0xc2c40d25, 0x83006d69, 0x82c60b55,
- 0x82c4035a, 0xc3002aba, 0x82c6095b, 0x8301c49b, 0x82c40497,
0xc2c40a4b, 0x83008b2b, 0x82c406a5, 0x82c406d4, 0xc3034ab5,
- 0x82c402b6, 0x82c60937, 0x8300252f, 0xc2c40497, 0x82fe964e,
0x82c40d4a, 0x82c60ea5, 0xc30166a9, 0x82c6056d, 0x82c402b6,
- 0x8301385e, 0xc2c4092e, 0x8300bc97, 0x82c40a95, 0x82c40d4a,
0xc3008daa, 0x82c60b4d, 0x82c6056b, 0x830042db, 0xc2c4025d,
- 0x82c4092d, 0x83002d33, 0x82c40a95, 0xc3009b4d, 0x82c406aa,
0x82c60ad5, 0x83006575, 0xc2c604bb, 0x82c4025b, 0x83013457,
- 0x82c4052b, 0xc2ffba94, 0x82c60e95, 0x82c406aa, 0x83008ada,
0xc2c609b5, 0x82c404b6, 0x83004aae, 0x82c60a4f, 0xc2c20526,
- 0x83012d26, 0x82c60d55, 0x8301a5a9, 0xc2c4056a, 0x82c6096d,
0x8301649d, 0x82c4049e, 0xc2c40a4d, 0x83004d4d, 0x82c40d25,
- 0x8300bd53, 0xc2c40b54, 0x82c60b5a, 0x8301895a, 0x82c6095b,
0xc2c4049b, 0x83004a97, 0x82c40a4b, 0x82c40aa5, 0xc3001ea5,
- 0x82c406d4, 0x8302badb, 0x82c402b6, 0xc2c60937, 0x830064af,
0x82c40497, 0x82c4064b, 0xc2fe374a, 0x82c60da5, 0x8300b6b5,
- 0x82c6056d, 0xc2c402ba, 0x8300793e, 0x82c4092e, 0x82c40c96,
0xc3015d15, 0x82c40d4a, 0x82c60da5, 0x83013555, 0xc2c4056a,
- 0x83007a7a, 0x82c60a5d, 0x82c4092d, 0xc3006aab, 0x82c40a95,
0x82c40b4a, 0x83004baa, 0xc2c60ad5, 0x82c4055a, 0x830128ba,
- 0x82c60a5b, 0xc3007537, 0x82c4052b, 0x82c40693, 0x83015715,
0xc2c406aa, 0x82c60ad9, 0x830035b5, 0x82c404b6, 0xc3008a5e,
- 0x82c40a4e, 0x82c40d26, 0x83006ea6, 0xc2c40d52, 0x82c60daa,
0x8301466a, 0x82c6056d, 0xc2c404ae, 0x83003a9d, 0x82c40a4d,
- 0x83007d2b, 0xc2c40b25, 0x82c40d52, 0x83015d54, 0x82c60b5a,
0xc2c6055d, 0x8300355b, 0x82c4049d, 0x83007657, 0x82c40a4b,
- 0x82c40aa5, 0x83006b65, 0x82c406d2, 0xc2c60ada, 0x830045b6,
0x82c60937, 0x82c40497, 0xc3003697, 0x82c40a4d, 0x82fe76aa,
- 0x82c60da5, 0xc2c405aa, 0x83005aec, 0x82c60aae, 0x82c4092e,
0xc3003d2e, 0x82c40c96, 0x83018d45, 0x82c40d4a, 0xc2c60d55,
- 0x83016595, 0x82c4056a, 0x82c60a6d, 0xc300455d, 0x82c4052d,
0x82c40a95, 0x83003e95, 0xc2c40b4a, 0x83017b4a, 0x82c609d5,
- 0x82c4055a, 0xc3015a3a, 0x82c60a5b, 0x82c4052b, 0x83014a17,
0xc2c40693, 0x830096ab, 0x82c406aa, 0x82c60ab5, 0xc30064f5,
- 0x82c404b6, 0x82c60a57, 0x82fe452e, 0xc2c40d16, 0x82c60e93,
0x82fe3752, 0x82c60daa, 0xc30175aa, 0x82c6056d, 0x82c404ae,
- 0x83015a1b, 0xc2c40a2d, 0x82c40d15, 0x83004da5, 0x82c40b52,
0xc3009d6a, 0x82c60ada, 0x82c6055d, 0x8301629b, 0xc2c4045b,
- 0x82c40a2b, 0x83005b2b, 0x82c40a95, 0xc2c40b52, 0x83012ab2,
0x82c60ad6, 0x83017556, 0xc2c60537, 0x82c40457, 0x83005657,
- 0x82c4052b, 0xc2c40695, 0x83003795, 0x82c405aa, 0x8300aab6,
0xc2c60a6d, 0x82c404ae, 0x8300696e, 0x82c40a56, 0xc2c40d2a,
- 0x83005eaa, 0x82c60d55, 0x82c405aa, 0xc3003b6a, 0x82c60a6d,
0x830074bd, 0x82c404ab, 0xc2c40a8d, 0x83005d55, 0x82c40b2a,
- 0x82c60b55, 0xc30045d5, 0x82c404da, 0x82c6095d, 0x83002557,
0xc2c4049b, 0x83006a97, 0x82c4064b, 0x82c406a9, 0x83004baa,
- 0x82c606b5, 0x82c402ba, 0x83002ab6, 0xc2c60937, 0x82fe652e,
0x82c40d16, 0x82c60e4b, 0xc2fe56d2, 0x82c60da9, 0x82c605b5,
- 0x8300336d, 0xc2c402ae, 0x82c40a2e, 0x83002e2d, 0x82c40c95,
0xc3006d55, 0x82c40b52, 0x82c60b69, 0x830045da, 0xc2c6055d,
- 0x82c4025d, 0x83003a5b, 0x82c40a2b, 0xc3017a8b, 0x82c40a95,
0x82c40b4a, 0x83015b2a, 0xc2c60ad5, 0x82c6055b, 0x830042b7,
- 0x82c40257, 0xc300952f, 0x82c4052b, 0x82c40695, 0x830066d5,
0xc2c405aa, 0x82c60ab5, 0x8300456d, 0x82c404ae, 0xc2c60a57,
- 0x82ff3456, 0x82c40d2a, 0x83017e8a, 0xc2c60d55, 0x82c405aa,
0x83005ada, 0x82c6095d, 0xc2c404ae, 0x83004aab, 0x82c40a4d,
- 0x83008d2b, 0xc2c40b29, 0x82c60b55, 0x83007575, 0x82c402da,
0xc2c6095d, 0x830054d7, 0x82c4049b, 0x82c40a4b, 0xc3013a4b,
- 0x82c406a9, 0x83008ad9, 0x82c606b5, 0xc2c402b6, 0x83015936,
0x82c60937, 0x82c40497, 0xc2fe4696, 0x82c40e4a, 0x8300aea6,
- 0x82c60da9, 0xc2c605ad, 0x830162ad, 0x82c402ae, 0x82c4092e,
0xc3005cad, 0x82c40c95, 0x82c40d4a, 0x83013d4a, 0xc2c60b69,
- 0x8300757a, 0x82c6055b, 0x82c4025d, 0xc300595b, 0x82c4092b,
0x82c40a95, 0x83004d95, 0xc2c40b4a, 0x82c60b55, 0x830026d5,
- 0x82c6055b, 0xc3006277, 0x82c40257, 0x82c4052b, 0x82fe5aaa,
0xc2c60e95, 0x82c406aa, 0x83003baa, 0x82c60ab5, 0x830084bd,
- 0x82c404ae, 0x82c60a57, 0x82fe554d, 0xc2c40d26, 0x82c60d95,
0x83014655, 0x82c4056a, 0xc2c609ad, 0x8300255d, 0x82c404ae,
- 0x83006a5b, 0xc2c40a4d, 0x82c40d25, 0x83005da9, 0x82c60b55,
0xc2c4056a, 0x83002ada, 0x82c6095d, 0x830074bb, 0xc2c4049b,
- 0x82c40a4b, 0x83005b4b, 0x82c406a9, 0xc2c40ad4, 0x83024bb5,
0x82c402b6, 0x82c6095b, 0xc3002537, 0x82c40497, 0x82fe6656,
- 0x82c40e4a, 0xc2c60ea5, 0x830156a9, 0x82c605b5, 0x82c402b6,
0xc30138ae, 0x82c4092e, 0x83017c8d, 0x82c40c95, 0xc2c40d4a,
- 0x83016d8a, 0x82c60b69, 0x82c6056d, 0xc301425b, 0x82c4025d,
0x82c4092d, 0x83002d2b, 0xc2c40a95, 0x83007d55, 0x82c40b4a,
- 0x82c60b55, 0xc3015555, 0x82c604db, 0x82c4025b, 0x83013857,
0xc2c4052b, 0x83008a9b, 0x82c40695, 0x82c406aa, 0xc3006aea,
- 0x82c60ab5, 0x82c404b6, 0x83004aae, 0xc2c60a57, 0x82c40527,
0x82fe3726, 0x82c60d95, 0xc30076b5, 0x82c4056a, 0x82c609ad,
- 0x830054dd, 0xc2c404ae, 0x82c40a4e, 0x83004d4d, 0x82c40d25,
0xc3008d59, 0x82c40b54, 0x82c60d6a, 0x8301695a, 0xc2c6095b,
- 0x82c4049b, 0x83004a9b, 0x82c40a4b, 0xc300ab27, 0x82c406a5,
0x82c406d4, 0x83026b75, 0xc2c402b6, 0x82c6095b, 0x830054b7,
- 0x82c40497, 0xc2c4064b, 0x82fe374a, 0x82c60ea5, 0x830086d9,
0xc2c605ad, 0x82c402b6, 0x8300596e, 0x82c4092e, 0xc2c40c96,
- 0x83004e95, 0x82c40d4a, 0x82c60da5, 0xc3002755, 0x82c4056c,
0x83027abb, 0x82c4025d, 0xc2c4092d, 0x83005cab, 0x82c40a95,
- 0x82c40b4a, 0xc3013b4a, 0x82c60b55, 0x8300955d, 0x82c404ba,
0xc2c60a5b, 0x83005557, 0x82c4052b, 0x82c40a95, 0xc3004b95,
- 0x82c406aa, 0x82c60ad5, 0x830026b5, 0xc2c404b6, 0x83006a6e,
0x82c60a57, 0x82c40527, 0xc2fe56a6, 0x82c60d93, 0x82c405aa,
- 0x83003b6a, 0xc2c6096d, 0x8300b4af, 0x82c404ae, 0x82c40a4d,
0xc3016d0d, 0x82c40d25, 0x82c40d52, 0x83005dd4, 0xc2c60b6a,
- 0x82c6096d, 0x8300255b, 0x82c4049b, 0xc3007a57, 0x82c40a4b,
0x82c40b25, 0x83015b25, 0xc2c406d4, 0x82c60ada, 0x830138b6]
-
- def __init__(self):
- self.lunarYear = 0
- self.lunarMonth = 0
- self.lunarDay = 0
- self.isIntercalation = False
-
- self.solarYear = 0
- self.solarMonth = 0
- self.solarDay = 0
-
- self.__gapjaYearInx = [0, 0, 0]
- self.__gapjaMonthInx = [0, 0, 1]
- self.__gapjaDayInx = [0, 0, 2]
-
-
- def LunarIsoFormat(self):
- dateStr = "%04d-%02d-%02d" % (self.lunarYear, self.lunarMonth,
self.lunarDay)
- if self.isIntercalation :
- dateStr += " Intercalation"
- return dateStr
-
- def SolarIsoFormat(self):
- return "%04d-%02d-%02d" % (self.solarYear, self.solarMonth,
self.solarDay)
-
- def __getLunarData(self, year):
- return self.KOREAN_LUNAR_DATA[year - self.KOREAN_LUNAR_BASE_YEAR]
-
- def __getLunarIntercalationMonth(self, lunarData):
- return (lunarData >> 12) & 0x000F
-
- def __getLunarDays(self, year, month=None, isIntercalation=None):
- lunarData = self.__getLunarData(year)
-
- if month is not None and isIntercalation is not None :
- if (isIntercalation == True) and
(self.__getLunarIntercalationMonth(lunarData) == month):
- days = self.LUNAR_BIG_MONTH_DAY if ((lunarData >>16) & 0x01) >
0 else self.LUNAR_SMALL_MONTH_DAY
- else:
- days = self.LUNAR_BIG_MONTH_DAY if ((lunarData >> (12 -
month)) & 0x01) > 0 else self.LUNAR_SMALL_MONTH_DAY
- else:
- days = (lunarData >> 17) & 0x01FF
- return days
-
- def __getLunarDaysBeforeBaseYear(self, year):
- days = 0
- for baseYear in range(self.KOREAN_LUNAR_BASE_YEAR, year+1):
- days += self.__getLunarDays(baseYear)
- return days
-
- def __getLunarDaysBeforeBaseMonth(self, year, month, isIntercalation):
- days = 0
- if (year >= self.KOREAN_LUNAR_BASE_YEAR) and (month > 0):
- for baseMonth in range(1, month+1):
- days += self.__getLunarDays(year, baseMonth, False)
-
- if isIntercalation == True:
- intercalationMonth =
self.__getLunarIntercalationMonth(self.__getLunarData(year))
- if (intercalationMonth > 0) and intercalationMonth < month+1:
- days += self.__getLunarDays(year, intercalationMonth, True)
- return days
-
- def __getLunarAbsDays(self, year, month, day, isIntercalation):
- days = self.__getLunarDaysBeforeBaseYear(year-1) +
self.__getLunarDaysBeforeBaseMonth(year, month-1, True) + day
- if (isIntercalation == True) and
(self.__getLunarIntercalationMonth(self.__getLunarData(year)) == month):
- days += self.__getLunarDays(year, month, False)
- return days
-
- def __isSolarIntercalationYear(self, lunarData):
- return ((lunarData >> 30) & 0x01) > 0
-
- def __getSolarDays(self, year, month=None):
- lunarData = self.__getLunarData(year)
- if month is not None :
- days = self.SOLAR_DAYS[12] if (month == 2) and
self.__isSolarIntercalationYear(lunarData) else self.SOLAR_DAYS[month - 1]
- if (year == 1582) and (month == 10):
- days -= 10
- else:
- days = self.SOLAR_BIG_YEAR_DAY if
self.__isSolarIntercalationYear(lunarData) else self.SOLAR_SMALL_YEAR_DAY
- if year == 1582 :
- days -= 10
- return days
-
- def __getSolarDaysBeforeBaseYear(self, year):
- days = 0
- for baseYear in range(self.KOREAN_LUNAR_BASE_YEAR, year+1):
- days += self.__getSolarDays(baseYear)
- return days
-
- def __getSolarDaysBeforeBaseMonth(self, year, month):
- days = 0
- for baseMonth in range(1, month+1):
- days += self.__getSolarDays(year, baseMonth)
- return days
-
- def __getSolarAbsDays(self, year, month, day):
- days = self.__getSolarDaysBeforeBaseYear(year-1) +
self.__getSolarDaysBeforeBaseMonth(year, month-1) + day
- days -= self.SOLAR_LUNAR_DAY_DIFF
- return days
-
- def __setSolarDateByLunarDate(self, lunarYear, lunarMonth, lunarDay,
isIntercalation):
- absDays = self.__getLunarAbsDays(lunarYear, lunarMonth, lunarDay,
isIntercalation)
- solarYear = 0
- solarMonth = 0
- solarDay = 0
-
- solarYear = lunarYear if (absDays <
self.__getSolarAbsDays(lunarYear+1, 1, 1)) else lunarYear+1
-
- for month in range(12, 0, -1) :
- absDaysByMonth = self.__getSolarAbsDays(solarYear, month, 1)
- if (absDays >= absDaysByMonth) :
- solarMonth = month
- solarDay = absDays - absDaysByMonth +1
- break
-
- if (solarYear == 1582) and (solarMonth == 10) and (solarDay > 4) :
- solarDay += 10
-
- self.solarYear = solarYear
- self.solarMonth = solarMonth
- self.solarDay = solarDay
-
- def __setLunarDateBySolarDate(self, solarYear, solarMonth, solarDay):
- absDays = self.__getSolarAbsDays(solarYear, solarMonth, solarDay)
- lunarYear = solarYear if (absDays >= self.__getLunarAbsDays(solarYear,
1, 1, False)) else solarYear-1
- lunarMonth = 0
- lunarDay = 0
- isIntercalation = False
-
- for month in range(12, 0, -1) :
- absDaysByMonth = self.__getLunarAbsDays(lunarYear, month, 1, False)
- if absDays >= absDaysByMonth:
- lunarMonth = month
- if
self.__getLunarIntercalationMonth(self.__getLunarData(lunarYear)) == month :
- isIntercalation = absDays >=
self.__getLunarAbsDays(lunarYear, month, 1, True)
-
- lunarDay = absDays - self.__getLunarAbsDays(lunarYear,
lunarMonth, 1, isIntercalation) + 1
- break
-
- self.lunarYear = lunarYear
- self.lunarMonth = lunarMonth
- self.lunarDay = lunarDay
- self.isIntercalation = isIntercalation
-
- def __checkValidDate(self, isLunar, isIntercalation, year, month, day):
- isValid = False
- dateValue = year*10000 + month*100 + day
- #1582. 10. 5 ~ 1582. 10. 14 is not valid
- minValue = self.KOREAN_LUNAR_MIN_VALUE if isLunar else
self.KOREAN_SOLAR_MIN_VALUE
- maxValue = self.KOREAN_LUNAR_MAX_VALUE if isLunar else
self.KOREAN_SOLAR_MAX_VALUE
-
- if minValue <= dateValue and maxValue >= dateValue :
- if month > 0 and month < 13 and day > 0 :
- dayLimit = self.__getLunarDays(year, month, isIntercalation)
if isLunar else self.__getSolarDays(year, month)
- if isLunar == False and year == 1582 and month == 10 :
- if day > 4 and day < 15 :
- return isValid
- else:
- dayLimit += 10
-
- if day <= dayLimit :
- isValid = True
-
- return isValid
-
- 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
-
- def setSolarDate(self, solarYear, solarMonth, solarDay):
- isValid = False
- if self.__checkValidDate(False, False, solarYear, solarMonth,
solarDay) :
- self.solarYear = solarYear
- self.solarMonth = solarMonth
- self.solarDay = solarDay
- self.__setLunarDateBySolarDate(solarYear, solarMonth, solarDay)
- isValid = True
- return isValid
-
- def __getGapJa(self):
- absDays = self.__getLunarAbsDays(self.lunarYear, self.lunarMonth,
self.lunarDay, self.isIntercalation)
- if absDays > 0 :
- self.__gapjaYearInx[0] = ((self.lunarYear+7) -
self.KOREAN_LUNAR_BASE_YEAR) % len(self.KOREAN_CHEONGAN)
- self.__gapjaYearInx[1] = (((self.lunarYear+7) -
self.KOREAN_LUNAR_BASE_YEAR) % len(self.KOREAN_GANJI))
-
- monthCount = self.lunarMonth
- monthCount += 12 * (self.lunarYear - self.KOREAN_LUNAR_BASE_YEAR)
- self.__gapjaMonthInx[0] = (monthCount+5) %
len(self.KOREAN_CHEONGAN)
- self.__gapjaMonthInx[1] = (monthCount+1) % len(self.KOREAN_GANJI)
-
- self.__gapjaDayInx[0] = (absDays+4) % len(self.KOREAN_CHEONGAN)
- self.__gapjaDayInx[1] = absDays % len(self.KOREAN_GANJI)
-
- def getGapJaString(self) :
- self.__getGapJa()
- gapjaStr = "%c%c%c %c%c%c %c%c%c" %
(chr(self.KOREAN_CHEONGAN[self.__gapjaYearInx[0]]),
chr(self.KOREAN_GANJI[self.__gapjaYearInx[1]]),
chr(self.KOREAN_GAPJA_UNIT[self.__gapjaYearInx[2]]),
- chr(self.KOREAN_CHEONGAN[self.__gapjaMonthInx[0]]),
chr(self.KOREAN_GANJI[self.__gapjaMonthInx[1]]),
chr(self.KOREAN_GAPJA_UNIT[self.__gapjaMonthInx[2]]),
- chr(self.KOREAN_CHEONGAN[self.__gapjaDayInx[0]]),
chr(self.KOREAN_GANJI[self.__gapjaDayInx[1]]),
chr(self.KOREAN_GAPJA_UNIT[self.__gapjaDayInx[2]]))
-
- if self.isIntercalation == True :
- gapjaStr += " (%c%c)" % (chr(self.INTERCALATION_STR[0]),
chr(self.KOREAN_GAPJA_UNIT[1]))
- return gapjaStr
-
-
- def getChineseGapJaString(self) :
- self.__getGapJa()
- gapjaStr = "%c%c%c %c%c%c %c%c%c" %
(chr(self.CHINESE_CHEONGAN[self.__gapjaYearInx[0]]),
chr(self.CHINESE_GANJI[self.__gapjaYearInx[1]]),
chr(self.CHINESE_GAPJA_UNIT[self.__gapjaYearInx[2]]),
- chr(self.CHINESE_CHEONGAN[self.__gapjaMonthInx[0]]),
chr(self.CHINESE_GANJI[self.__gapjaMonthInx[1]]),
chr(self.CHINESE_GAPJA_UNIT[self.__gapjaMonthInx[2]]),
- chr(self.CHINESE_CHEONGAN[self.__gapjaDayInx[0]]),
chr(self.CHINESE_GANJI[self.__gapjaDayInx[1]]),
chr(self.CHINESE_GAPJA_UNIT[self.__gapjaDayInx[2]]))
-
- if self.isIntercalation == True :
- gapjaStr += " (%c%c)" % (chr(self.INTERCALATION_STR[1]),
chr(self.CHINESE_GAPJA_UNIT[1]))
- return gapjaStr
+# -*- coding: utf-8 -*-
+
+"""
+KoreanLunarCalendar
+Here is a library to convert Korean lunar-calendar to Gregorian calendar.
+Korean calendar and Chinese calendar is same lunar calendar but have different
date.
+This follow the KARI(Korea Astronomy and Space Science Institute)
+@author : [email protected]
+"""
+
+import datetime
+class KoreanLunarCalendar(object) :
+ KOREAN_LUNAR_MIN_VALUE = 10000101
+ KOREAN_LUNAR_MAX_VALUE = 20501118
+ KOREAN_SOLAR_MIN_VALUE = 10000213
+ KOREAN_SOLAR_MAX_VALUE = 20501231
+
+ KOREAN_LUNAR_BASE_YEAR = 1000
+ SOLAR_LUNAR_DAY_DIFF = 43
+
+ LUNAR_SMALL_MONTH_DAY = 29
+ LUNAR_BIG_MONTH_DAY = 30
+ SOLAR_SMALL_YEAR_DAY = 365
+ SOLAR_BIG_YEAR_DAY = 366
+
+ SOLAR_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 29]
+ KOREAN_CHEONGAN = [0xac11, 0xc744, 0xbcd1, 0xc815, 0xbb34, 0xae30, 0xacbd,
0xc2e0, 0xc784, 0xacc4]
+ KOREAN_GANJI = [0xc790, 0xcd95, 0xc778, 0xbb18, 0xc9c4, 0xc0ac, 0xc624,
0xbbf8, 0xc2e0, 0xc720, 0xc220, 0xd574]
+ KOREAN_GAPJA_UNIT = [0xb144, 0xc6d4, 0xc77c]
+
+ CHINESE_CHEONGAN = [0x7532, 0x4e59, 0x4e19, 0x4e01, 0x620a, 0x5df1,
0x5e9a, 0x8f9b, 0x58ec, 0x7678]
+ CHINESE_GANJI = [0x5b50, 0x4e11, 0x5bc5, 0x536f, 0x8fb0, 0x5df3, 0x5348,
0x672a, 0x7533, 0x9149, 0x620c, 0x4ea5]
+ CHINESE_GAPJA_UNIT = [0x5e74, 0x6708, 0x65e5]
+
+ INTERCALATION_STR = [0xc724, 0x958f]
+
+ KOREAN_LUNAR_DATA = [
+ 0x82c60a57, 0x82fec52b, 0x82c40d2a, 0x82c60d55, 0xc30095ad,
0x82c4056a, 0x82c6096d, 0x830054dd, 0xc2c404ad, 0x82c40a4d,
+ 0x83002e4d, 0x82c40b26, 0xc300ab56, 0x82c60ad5, 0x82c4035a,
0x8300697a, 0xc2c6095b, 0x82c4049b, 0x83004a9b, 0x82c40a4b,
+ 0xc301caa5, 0x82c406aa, 0x82c60ad5, 0x830092dd, 0xc2c402b5,
0x82c60957, 0x82fe54ae, 0x82c60c97, 0xc2c4064b, 0x82ff254a,
+ 0x82c60da9, 0x8300a6b6, 0xc2c6066d, 0x82c4026e, 0x8301692e,
0x82c4092e, 0xc2c40c96, 0x83004d95, 0x82c40d4a, 0x8300cd69,
+ 0xc2c40b58, 0x82c80d6b, 0x8301926b, 0x82c4025d, 0xc2c4092b,
0x83005aab, 0x82c40a95, 0x82c40b4a, 0xc3021eab, 0x82c402d5,
+ 0x8301b55a, 0x82c604bb, 0xc2c4025b, 0x83007537, 0x82c4052b,
0x82c40695, 0xc3003755, 0x82c406aa, 0x8303cab5, 0x82c40275,
+ 0xc2c404b6, 0x83008a5e, 0x82c40a56, 0x82c40d26, 0xc3005ea6,
0x82c60d55, 0x82c405aa, 0x83001d6a, 0xc2c6096d, 0x8300b4af,
+ 0x82c4049d, 0x82c40a4d, 0xc3007d2d, 0x82c40aa6, 0x82c60b55,
0x830045d5, 0xc2c4035a, 0x82c6095d, 0x83011173, 0x82c4045b,
+ 0xc3009a4f, 0x82c4064b, 0x82c40aa5, 0x83006b69, 0xc2c606b5,
0x82c402da, 0x83002ab6, 0x82c60937, 0xc2fec497, 0x82c60c97,
+ 0x82c4064b, 0x82fe86aa, 0xc2c60da5, 0x82c405b4, 0x83034a6d,
0x82c402ae, 0xc2c40e61, 0x83002d2e, 0x82c40c96, 0x83009d4d,
+ 0x82c40d4a, 0x82c60d65, 0x83016595, 0x82c6055d, 0xc2c4026d,
0x83002a5d, 0x82c4092b, 0x8300aa97, 0xc2c40a95, 0x82c40b4a,
+ 0x83008b5a, 0x82c60ad5, 0xc2c6055b, 0x830042b7, 0x82c40457,
0x82c4052b, 0xc3001d2b, 0x82c40695, 0x8300972d, 0x82c405aa,
+ 0xc2c60ab5, 0x830054ed, 0x82c404b6, 0x82c60a57, 0xc2ff344e,
0x82c40d26, 0x8301be92, 0x82c60d55, 0xc2c405aa, 0x830089ba,
+ 0x82c6096d, 0x82c404ae, 0xc3004a9d, 0x82c40a4d, 0x82c40d25,
0x83002f25, 0xc2c40b54, 0x8303ad69, 0x82c402da, 0x82c6095d,
+ 0xc301649b, 0x82c4049b, 0x82c40a4b, 0x83004b4b, 0xc2c406a5,
0x8300bb53, 0x82c406b4, 0x82c60ab6, 0xc3018956, 0x82c60997,
+ 0x82c40497, 0x83004697, 0xc2c4054b, 0x82fec6a5, 0x82c60da5,
0x82c405ac, 0xc303aab5, 0x82c4026e, 0x82c4092e, 0x83006cae,
+ 0xc2c40c96, 0x82c40d4a, 0x83002f4a, 0x82c60d55, 0xc300b56b,
0x82c6055b, 0x82c4025d, 0x8300793d, 0xc2c40927, 0x82c40a95,
+ 0x83015d15, 0x82c40b4a, 0xc2c60b55, 0x830112d5, 0x82c604db,
0x82fe925e, 0xc2c60a57, 0x82c4052b, 0x83006aab, 0x82c40695,
+ 0xc2c406aa, 0x83003baa, 0x82c60ab5, 0x8300b4b7, 0xc2c404ae,
0x82c60a57, 0x82fe752e, 0x82c40d26, 0xc2c60e93, 0x830056d5,
+ 0x82c405aa, 0x82c609b5, 0xc300256d, 0x82c404ae, 0x8301aa4d,
0x82c40a4d, 0xc2c40d26, 0x83006d65, 0x82c40b52, 0x82c60d6a,
+ 0xc30026da, 0x82c6095d, 0x8301c49d, 0x82c4049b, 0xc2c40a4b,
0x83008aab, 0x82c406a5, 0x82c40b54, 0xc3004bb4, 0x82c60ab6,
+ 0x82c6095b, 0x83002537, 0xc2c40497, 0x8300964f, 0x82c4054b,
0x82c406a5, 0xc30176c5, 0x82c405ac, 0x82c60ab6, 0x8301386e,
+ 0xc2c4092e, 0x8300cc97, 0x82c40c96, 0x82c40d4a, 0xc3008daa,
0x82c60b55, 0x82c4056a, 0x83025adb, 0xc2c4025d, 0x82c4092e,
+ 0x83002d2b, 0x82c40a95, 0xc3009d4d, 0x82c40b2a, 0x82c60b55,
0x83007575, 0xc2c404da, 0x82c60a5b, 0x83004557, 0x82c4052b,
+ 0xc301ca93, 0x82c40693, 0x82c406aa, 0x83008ada, 0xc2c60ae5,
0x82c404b6, 0x83004aae, 0x82c60a57, 0xc2c40527, 0x82ff2526,
+ 0x82c60e53, 0x8300a6cb, 0xc2c405aa, 0x82c605ad, 0x830164ad,
0x82c404ae, 0xc2c40a4e, 0x83004d4d, 0x82c40d26, 0x8300bd53,
+ 0xc2c40b52, 0x82c60b6a, 0x8301956a, 0x82c60557, 0xc2c4049d,
0x83015a1b, 0x82c40a4b, 0x82c40aa5, 0xc3001ea5, 0x82c40b52,
+ 0x8300bb5a, 0x82c60ab6, 0xc2c6095b, 0x830064b7, 0x82c40497,
0x82c4064b, 0xc300374b, 0x82c406a5, 0x8300b6b3, 0x82c405ac,
+ 0xc2c60ab6, 0x830182ad, 0x82c4049e, 0x82c40a4d, 0xc3005d4b,
0x82c40b25, 0x82c40b52, 0x83012e52, 0xc2c60b5a, 0x8300a95e,
+ 0x82c6095b, 0x82c4049b, 0xc3006a57, 0x82c40a4b, 0x82c40aa5,
0x83004ba5, 0xc2c406d4, 0x8300cad6, 0x82c60ab6, 0x82c60937,
+ 0x8300849f, 0x82c40497, 0x82c4064b, 0x82fe56ca, 0xc2c60da5,
0x82c405aa, 0x83001d6c, 0x82c60a6e, 0xc300b92f, 0x82c4092e,
+ 0x82c40c96, 0x83007d55, 0xc2c40d4a, 0x82c60d55, 0x83013555,
0x82c4056a, 0xc2c60a6d, 0x83001a5d, 0x82c4092b, 0x83008a5b,
+ 0xc2c40a95, 0x82c40b2a, 0x83015b2a, 0x82c60ad5, 0xc2c404da,
0x83001cba, 0x82c60a57, 0x8300952f, 0xc2c40527, 0x82c40693,
+ 0x830076b3, 0x82c406aa, 0xc2c60ab5, 0x83003575, 0x82c404b6,
0x8300ca67, 0xc2c40a2e, 0x82c40d16, 0x83008e96, 0x82c40d4a,
+ 0xc2c60daa, 0x830055ea, 0x82c6056d, 0x82c404ae, 0xc301285d,
0x82c40a2d, 0x8300ad17, 0x82c40aa5, 0xc2c40b52, 0x83007d74,
+ 0x82c60ada, 0x82c6055d, 0xc300353b, 0x82c4045b, 0x82c40a2b,
0x83011a2b, 0xc2c40aa5, 0x83009b55, 0x82c406b2, 0x82c60ad6,
+ 0xc3015536, 0x82c60937, 0x82c40457, 0x83003a57, 0xc2c4052b,
0x82feaaa6, 0x82c60d95, 0x82c405aa, 0xc3017aac, 0x82c60a6e,
+ 0x82c4052e, 0x83003cae, 0xc2c40a56, 0x8300bd2b, 0x82c40d2a,
0x82c60d55, 0xc30095ad, 0x82c4056a, 0x82c60a6d, 0x8300555d,
+ 0xc2c4052b, 0x82c40a8d, 0x83002e55, 0x82c40b2a, 0xc300ab56,
0x82c60ad5, 0x82c404da, 0x83006a7a, 0xc2c60a57, 0x82c4051b,
+ 0x83014a17, 0x82c40653, 0xc301c6a9, 0x82c405aa, 0x82c60ab5,
0x830092bd, 0xc2c402b6, 0x82c60a37, 0x82fe552e, 0x82c40d16,
+ 0x82c60e4b, 0x82fe3752, 0x82c60daa, 0x8301b5b4, 0xc2c6056d,
0x82c402ae, 0x83007a3d, 0x82c40a2d, 0xc2c40d15, 0x83004d95,
+ 0x82c40b52, 0x8300cb69, 0xc2c60ada, 0x82c6055d, 0x8301925b,
0x82c4045b, 0xc2c40a2b, 0x83005aab, 0x82c40a95, 0x82c40b52,
+ 0xc3001eaa, 0x82c60ab6, 0x8300c55b, 0x82c604b7, 0xc2c40457,
0x83007537, 0x82c4052b, 0x82c40695, 0xc3014695, 0x82c405aa,
+ 0x8300cab5, 0x82c60a6e, 0xc2c404ae, 0x83008a5e, 0x82c40a56,
0x82c40d2a, 0xc3006eaa, 0x82c60d55, 0x82c4056a, 0x8301295a,
+ 0xc2c6095d, 0x8300b4af, 0x82c4049b, 0x82c40a4d, 0xc3007d2d,
0x82c40b2a, 0x82c60b55, 0x830045d5, 0xc2c402da, 0x82c6095b,
+ 0x83011157, 0x82c4049b, 0xc3009a4f, 0x82c4064b, 0x82c406a9,
0x83006aea, 0xc2c606b5, 0x82c402b6, 0x83002aae, 0x82c60937,
+ 0xc2ffb496, 0x82c40c96, 0x82c60e4b, 0x82fe76b2, 0xc2c60daa,
0x82c605ad, 0x8300336d, 0x82c4026e, 0xc2c4092e, 0x83002d2d,
+ 0x82c40c95, 0x83009d4d, 0xc2c40b4a, 0x82c60b69, 0x8301655a,
0x82c6055b, 0xc2c4025d, 0x83002a5b, 0x82c4092b, 0x8300aa97,
+ 0xc2c40695, 0x82c4074a, 0x83008b5a, 0x82c60ab6, 0xc2c6053b,
0x830042b7, 0x82c40257, 0x82c4052b, 0xc3001d2b, 0x82c40695,
+ 0x830096ad, 0x82c405aa, 0xc2c60ab5, 0x830054ed, 0x82c404ae,
0x82c60a57, 0xc2ff344e, 0x82c40d2a, 0x8301bd94, 0x82c60b55,
+ 0x82c4056a, 0x8300797a, 0x82c6095d, 0x82c404ae, 0xc3004a9b,
0x82c40a4d, 0x82c40d25, 0x83011aaa, 0xc2c60b55, 0x8300956d,
+ 0x82c402da, 0x82c6095b, 0xc30054b7, 0x82c40497, 0x82c40a4b,
0x83004b4b, 0xc2c406a9, 0x8300cad5, 0x82c605b5, 0x82c402b6,
+ 0xc300895e, 0x82c6092f, 0x82c40497, 0x82fe4696, 0xc2c40d4a,
0x8300cea5, 0x82c60d69, 0x82c6056d, 0xc301a2b5, 0x82c4026e,
+ 0x82c4092e, 0x83006cad, 0xc2c40c95, 0x82c40d4a, 0x83002f4a,
0x82c60b59, 0xc300c56d, 0x82c6055b, 0x82c4025d, 0x8300793b,
+ 0xc2c4092b, 0x82c40a95, 0x83015b15, 0x82c406ca, 0xc2c60ad5,
0x830112b6, 0x82c604bb, 0x8300925f, 0xc2c40257, 0x82c4052b,
+ 0x82fe6aaa, 0x82c60e95, 0xc2c406aa, 0x83003baa, 0x82c60ab5,
0x8300b4b7, 0xc2c404ae, 0x82c60a57, 0x82fe752d, 0x82c40d26,
+ 0xc2c60d95, 0x830055d5, 0x82c4056a, 0x82c6096d, 0xc300255d,
0x82c404ae, 0x8300aa4f, 0x82c40a4d, 0xc2c40d25, 0x83006d69,
+ 0x82c60b55, 0x82c4035a, 0xc3002aba, 0x82c6095b, 0x8301c49b,
0x82c40497, 0xc2c40a4b, 0x83008b2b, 0x82c406a5, 0x82c406d4,
+ 0xc3034ab5, 0x82c402b6, 0x82c60937, 0x8300252f, 0xc2c40497,
0x82fe964e, 0x82c40d4a, 0x82c60ea5, 0xc30166a9, 0x82c6056d,
+ 0x82c402b6, 0x8301385e, 0xc2c4092e, 0x8300bc97, 0x82c40a95,
0x82c40d4a, 0xc3008daa, 0x82c60b4d, 0x82c6056b, 0x830042db,
+ 0xc2c4025d, 0x82c4092d, 0x83002d2b, 0x82c40a95, 0xc3009b4d,
0x82c406aa, 0x82c60ad5, 0x83006575, 0xc2c604bb, 0x82c4025b,
+ 0x83013457, 0x82c4052b, 0xc2ffba94, 0x82c60e95, 0x82c406aa,
0x83008ada, 0xc2c609b5, 0x82c404b6, 0x83004aae, 0x82c60a4f,
+ 0xc2c20526, 0x83012d26, 0x82c60d55, 0x8301a5a9, 0xc2c4056a,
0x82c6096d, 0x8301649d, 0x82c4049e, 0xc2c40a4d, 0x83004d4d,
+ 0x82c40d25, 0x8300bd53, 0xc2c40b54, 0x82c60b5a, 0x8301895a,
0x82c6095b, 0xc2c4049b, 0x83004a97, 0x82c40a4b, 0x82c40aa5,
+ 0xc3001ea5, 0x82c406d4, 0x8302badb, 0x82c402b6, 0xc2c60937,
0x830064af, 0x82c40497, 0x82c4064b, 0xc2fe374a, 0x82c60da5,
+ 0x8300b6b5, 0x82c6056d, 0xc2c402ae, 0x8300793e, 0x82c4092e,
0x82c40c96, 0xc3015d15, 0x82c40d4a, 0x82c60da5, 0x83013555,
+ 0xc2c4056a, 0x83007a7a, 0x82c60a5d, 0x82c4092d, 0xc3006aab,
0x82c40a95, 0x82c40b4a, 0x83004baa, 0xc2c60ad5, 0x82c4055a,
+ 0x830128ba, 0x82c60a5b, 0xc3007537, 0x82c4052b, 0x82c40693,
0x83015715, 0xc2c406aa, 0x82c60ad5, 0x830035b5, 0x82c404b6,
+ 0xc3008a5e, 0x82c40a4e, 0x82c40d26, 0x83006ea6, 0xc2c40d52,
0x82c60daa, 0x8301466a, 0x82c6056d, 0xc2c404ae, 0x83003a9d,
+ 0x82c40a4d, 0x83007d2b, 0xc2c40b25, 0x82c40d52, 0x83015d54,
0x82c60b5a, 0xc2c6055d, 0x8300355b, 0x82c4049b, 0x83007657,
+ 0x82c40a4b, 0x82c40aa5, 0x83006b65, 0x82c406d2, 0xc2c60ada,
0x830045b6, 0x82c60937, 0x82c40497, 0xc3003697, 0x82c4064d,
+ 0x82fe76aa, 0x82c60da5, 0xc2c405aa, 0x83005aec, 0x82c60aae,
0x82c4092e, 0xc3003d2e, 0x82c40c96, 0x83018d45, 0x82c40d4a,
+ 0xc2c60d55, 0x83016595, 0x82c4056a, 0x82c60a6d, 0xc300455d,
0x82c4052d, 0x82c40a95, 0x83013c95, 0xc2c40b4a, 0x83017b4a,
+ 0x82c60ad5, 0x82c4055a, 0xc3015a3a, 0x82c60a5b, 0x82c4052b,
0x83014a17, 0xc2c40693, 0x830096ab, 0x82c406aa, 0x82c60ab5,
+ 0xc30064f5, 0x82c404b6, 0x82c60a57, 0x82fe452e, 0xc2c40d16,
0x82c60e93, 0x82fe3752, 0x82c60daa, 0xc30175aa, 0x82c6056d,
+ 0x82c404ae, 0x83015a1d, 0xc2c40a2d, 0x82c40d15, 0x83004da5,
0x82c40b52, 0xc3009d6a, 0x82c60ada, 0x82c6055d, 0x8301629b,
+ 0xc2c4045b, 0x82c40a2b, 0x83005b2b, 0x82c40a95, 0xc2c40b52,
0x83012ab2, 0x82c60ad6, 0x83017556, 0xc2c60537, 0x82c40457,
+ 0x83005657, 0x82c4052b, 0xc2c40695, 0x83003795, 0x82c405aa,
0x8300aab6, 0xc2c60a6d, 0x82c404ae, 0x83006a6e, 0x82c40a56,
+ 0xc2c40d2a, 0x83005eaa, 0x82c60d55, 0x82c405aa, 0xc3003b6a,
0x82c60a6d, 0x830074bd, 0x82c404ab, 0xc2c40a8d, 0x83005d55,
+ 0x82c40b2a, 0x82c60b55, 0xc30045d5, 0x82c404da, 0x82c6095d,
0x83002557, 0xc2c4049b, 0x83006a97, 0x82c4064b, 0x82c406a9,
+ 0x83004baa, 0x82c606b5, 0x82c402ba, 0x83002ab6, 0xc2c60937,
0x82fe652e, 0x82c40d16, 0x82c60e4b, 0xc2fe56d2, 0x82c60da9,
+ 0x82c605b5, 0x8300336d, 0xc2c402ae, 0x82c40a2e, 0x83002e2d,
0x82c40c95, 0xc3006d55, 0x82c40b52, 0x82c60b69, 0x830045da,
+ 0xc2c6055d, 0x82c4025d, 0x83003a5b, 0x82c40a2b, 0xc3017a8b,
0x82c40a95, 0x82c40b4a, 0x83015b2a, 0xc2c60ad5, 0x82c6055b,
+ 0x830042b7, 0x82c40257, 0xc300952f, 0x82c4052b, 0x82c40695,
0x830066d5, 0xc2c405aa, 0x82c60ab5, 0x8300456d, 0x82c404ae,
+ 0xc2c60a57, 0x82ff3456, 0x82c40d2a, 0x83017e8a, 0xc2c60d55,
0x82c405aa, 0x83005ada, 0x82c6095d, 0xc2c404ae, 0x83004aab,
+ 0x82c40a4d, 0x83008d2b, 0xc2c40b29, 0x82c60b55, 0x83007575,
0x82c402da, 0xc2c6095d, 0x830054d7, 0x82c4049b, 0x82c40a4b,
+ 0xc3013a4b, 0x82c406a9, 0x83008ad9, 0x82c606b5, 0xc2c402b6,
0x83015936, 0x82c60937, 0x82c40497, 0xc2fe4696, 0x82c40e4a,
+ 0x8300aea6, 0x82c60da9, 0xc2c605ad, 0x830162ad, 0x82c402ae,
0x82c4092e, 0xc3005cad, 0x82c40c95, 0x82c40d4a, 0x83013d4a,
+ 0xc2c60b69, 0x8300757a, 0x82c6055b, 0x82c4025d, 0xc300595b,
0x82c4092b, 0x82c40a95, 0x83004d95, 0xc2c40b4a, 0x82c60b55,
+ 0x830026d5, 0x82c6055b, 0xc3006277, 0x82c40257, 0x82c4052b,
0x82fe5aaa, 0xc2c60e95, 0x82c406aa, 0x83003baa, 0x82c60ab5,
+ 0x830084bd, 0x82c404ae, 0x82c60a57, 0x82fe554d, 0xc2c40d26,
0x82c60d95, 0x83014655, 0x82c4056a, 0xc2c609ad, 0x8300255d,
+ 0x82c404ae, 0x83006a5b, 0xc2c40a4d, 0x82c40d25, 0x83005da9,
0x82c60b55, 0xc2c4056a, 0x83002ada, 0x82c6095d, 0x830074bb,
+ 0xc2c4049b, 0x82c40a4b, 0x83005b4b, 0x82c406a9, 0xc2c40ad4,
0x83024bb5, 0x82c402b6, 0x82c6095b, 0xc3002537, 0x82c40497,
+ 0x82fe6656, 0x82c40e4a, 0xc2c60ea5, 0x830156a9, 0x82c605b5,
0x82c402b6, 0xc30138ae, 0x82c4092e, 0x83017c8d, 0x82c40c95,
+ 0xc2c40d4a, 0x83016d8a, 0x82c60b69, 0x82c6056d, 0xc301425b,
0x82c4025d, 0x82c4092d, 0x83002d2b, 0xc2c40a95, 0x83007d55,
+ 0x82c40b4a, 0x82c60b55, 0xc3015555, 0x82c604db, 0x82c4025b,
0x83013857, 0xc2c4052b, 0x83008a9b, 0x82c40695, 0x82c406aa,
+ 0xc3006aea, 0x82c60ab5, 0x82c404b6, 0x83004aae, 0xc2c60a57,
0x82c40527, 0x82fe3726, 0x82c60d95, 0xc30076b5, 0x82c4056a,
+ 0x82c609ad, 0x830054dd, 0xc2c404ae, 0x82c40a4e, 0x83004d4d,
0x82c40d25, 0xc3008d59, 0x82c40b54, 0x82c60d6a, 0x8301695a,
+ 0xc2c6095b, 0x82c4049b, 0x83004a9b, 0x82c40a4b, 0xc300ab27,
0x82c406a5, 0x82c406d4, 0x83026b75, 0xc2c402b6, 0x82c6095b,
+ 0x830054b7, 0x82c40497, 0xc2c4064b, 0x82fe374a, 0x82c60ea5,
0x830086d9, 0xc2c605ad, 0x82c402b6, 0x8300596e, 0x82c4092e,
+ 0xc2c40c96, 0x83004e95, 0x82c40d4a, 0x82c60da5, 0xc3002755,
0x82c4056c, 0x83027abb, 0x82c4025d, 0xc2c4092d, 0x83005cab,
+ 0x82c40a95, 0x82c40b4a, 0xc3013b4a, 0x82c60b55, 0x8300955d,
0x82c404ba, 0xc2c60a5b, 0x83005557, 0x82c4052b, 0x82c40a95,
+ 0xc3004b95, 0x82c406aa, 0x82c60ad5, 0x830026b5, 0xc2c404b6,
0x83006a6e, 0x82c60a57, 0x82c40527, 0xc2fe56a6, 0x82c60d93,
+ 0x82c405aa, 0x83003b6a, 0xc2c6096d, 0x8300b4af, 0x82c404ae,
0x82c40a4d, 0xc3016d0d, 0x82c40d25, 0x82c40d52, 0x83005dd4,
+ 0xc2c60b6a, 0x82c6096d, 0x8300255b, 0x82c4049b, 0xc3007a57,
0x82c40a4b, 0x82c40b25, 0x83015b25, 0xc2c406d4, 0x82c60ada,
+ 0x830138b6]
+
+ def __init__(self):
+ self.lunarYear = 0
+ self.lunarMonth = 0
+ self.lunarDay = 0
+ self.isIntercalation = False
+
+ self.solarYear = 0
+ self.solarMonth = 0
+ self.solarDay = 0
+
+ self.__gapjaYearInx = [0, 0, 0]
+ self.__gapjaMonthInx = [0, 0, 1]
+ self.__gapjaDayInx = [0, 0, 2]
+
+
+ def LunarIsoFormat(self):
+ dateStr = "%04d-%02d-%02d" % (self.lunarYear, self.lunarMonth,
self.lunarDay)
+ if self.isIntercalation :
+ dateStr += " Intercalation"
+ return dateStr
+
+ def SolarIsoFormat(self):
+ return "%04d-%02d-%02d" % (self.solarYear, self.solarMonth,
self.solarDay)
+
+ def __getLunarData(self, year):
+ return self.KOREAN_LUNAR_DATA[year - self.KOREAN_LUNAR_BASE_YEAR]
+
+ def __getLunarIntercalationMonth(self, lunarData):
+ return (lunarData >> 12) & 0x000F
+
+ def __getLunarDays(self, year, month=None, isIntercalation=None):
+ lunarData = self.__getLunarData(year)
+
+ if month is not None and isIntercalation is not None :
+ if (isIntercalation == True) and
(self.__getLunarIntercalationMonth(lunarData) == month):
+ days = self.LUNAR_BIG_MONTH_DAY if ((lunarData >>16) & 0x01) >
0 else self.LUNAR_SMALL_MONTH_DAY
+ else:
+ days = self.LUNAR_BIG_MONTH_DAY if ((lunarData >> (12 -
month)) & 0x01) > 0 else self.LUNAR_SMALL_MONTH_DAY
+ else:
+ days = (lunarData >> 17) & 0x01FF
+ return days
+
+ def __getLunarDaysBeforeBaseYear(self, year):
+ days = 0
+ for baseYear in range(self.KOREAN_LUNAR_BASE_YEAR, year+1):
+ days += self.__getLunarDays(baseYear)
+ return days
+
+ def __getLunarDaysBeforeBaseMonth(self, year, month, isIntercalation):
+ days = 0
+ if (year >= self.KOREAN_LUNAR_BASE_YEAR) and (month > 0):
+ for baseMonth in range(1, month+1):
+ days += self.__getLunarDays(year, baseMonth, False)
+
+ if isIntercalation == True:
+ intercalationMonth =
self.__getLunarIntercalationMonth(self.__getLunarData(year))
+ if (intercalationMonth > 0) and intercalationMonth < month+1:
+ days += self.__getLunarDays(year, intercalationMonth, True)
+ return days
+
+ def __getLunarAbsDays(self, year, month, day, isIntercalation):
+ days = self.__getLunarDaysBeforeBaseYear(year-1) +
self.__getLunarDaysBeforeBaseMonth(year, month-1, True) + day
+ if (isIntercalation == True) and
(self.__getLunarIntercalationMonth(self.__getLunarData(year)) == month):
+ days += self.__getLunarDays(year, month, False)
+ return days
+
+ def __isSolarIntercalationYear(self, lunarData):
+ return ((lunarData >> 30) & 0x01) > 0
+
+ def __getSolarDays(self, year, month=None):
+ lunarData = self.__getLunarData(year)
+ if month is not None :
+ days = self.SOLAR_DAYS[12] if (month == 2) and
self.__isSolarIntercalationYear(lunarData) else self.SOLAR_DAYS[month - 1]
+ else:
+ days = self.SOLAR_BIG_YEAR_DAY if
self.__isSolarIntercalationYear(lunarData) else self.SOLAR_SMALL_YEAR_DAY
+ return days
+
+ def __getSolarDaysBeforeBaseYear(self, year):
+ days = 0
+ for baseYear in range(self.KOREAN_LUNAR_BASE_YEAR, year+1):
+ days += self.__getSolarDays(baseYear)
+ return days
+
+ def __getSolarDaysBeforeBaseMonth(self, year, month):
+ days = 0
+ for baseMonth in range(1, month+1):
+ days += self.__getSolarDays(year, baseMonth)
+ return days
+
+ def __getSolarAbsDays(self, year, month, day):
+ days = self.__getSolarDaysBeforeBaseYear(year-1) +
self.__getSolarDaysBeforeBaseMonth(year, month-1) + day
+ days -= self.SOLAR_LUNAR_DAY_DIFF
+ return days
+
+ def __setSolarDateByLunarDate(self, lunarYear, lunarMonth, lunarDay,
isIntercalation):
+ absDays = self.__getLunarAbsDays(lunarYear, lunarMonth, lunarDay,
isIntercalation)
+ solarYear = 0
+ solarMonth = 0
+ solarDay = 0
+
+ solarYear = lunarYear if (absDays <
self.__getSolarAbsDays(lunarYear+1, 1, 1)) else lunarYear+1
+
+ for month in range(12, 0, -1) :
+ absDaysByMonth = self.__getSolarAbsDays(solarYear, month, 1)
+ if (absDays >= absDaysByMonth) :
+ solarMonth = month
+ solarDay = absDays - absDaysByMonth +1
+ break
+
+ self.solarYear = solarYear
+ self.solarMonth = solarMonth
+ self.solarDay = solarDay
+
+ def __setLunarDateBySolarDate(self, solarYear, solarMonth, solarDay):
+ absDays = self.__getSolarAbsDays(solarYear, solarMonth, solarDay)
+ lunarYear = solarYear if (absDays >= self.__getLunarAbsDays(solarYear,
1, 1, False)) else solarYear-1
+ lunarMonth = 0
+ lunarDay = 0
+ isIntercalation = False
+
+ for month in range(12, 0, -1) :
+ absDaysByMonth = self.__getLunarAbsDays(lunarYear, month, 1, False)
+ if absDays >= absDaysByMonth:
+ lunarMonth = month
+ if
self.__getLunarIntercalationMonth(self.__getLunarData(lunarYear)) == month :
+ isIntercalation = absDays >=
self.__getLunarAbsDays(lunarYear, month, 1, True)
+
+ lunarDay = absDays - self.__getLunarAbsDays(lunarYear,
lunarMonth, 1, isIntercalation) + 1
+ break
+
+ self.lunarYear = lunarYear
+ self.lunarMonth = lunarMonth
+ self.lunarDay = lunarDay
+ self.isIntercalation = isIntercalation
+
+ def __checkValidDate(self, isLunar, isIntercalation, year, month, day):
+ isValid = False
+ dateValue = year*10000 + month*100 + day
+ #1582. 10. 5 ~ 1582. 10. 14 is not valid
+ minValue = self.KOREAN_LUNAR_MIN_VALUE if isLunar else
self.KOREAN_SOLAR_MIN_VALUE
+ maxValue = self.KOREAN_LUNAR_MAX_VALUE if isLunar else
self.KOREAN_SOLAR_MAX_VALUE
+
+ if minValue <= dateValue and maxValue >= dateValue :
+ if month > 0 and month < 13 and day > 0 :
+ dayLimit = self.__getLunarDays(year, month, isIntercalation)
if isLunar else self.__getSolarDays(year, month)
+ if isLunar == False and year == 1582 and month == 10 :
+ if day > 4 and day < 15 :
+ return isValid
+ else:
+ dayLimit += 10
+
+ if day <= dayLimit :
+ isValid = True
+
+ return isValid
+
+ 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
+
+ def setSolarDate(self, solarYear, solarMonth, solarDay):
+ isValid = False
+ if self.__checkValidDate(False, False, solarYear, solarMonth,
solarDay) :
+ self.solarYear = solarYear
+ self.solarMonth = solarMonth
+ self.solarDay = solarDay
+ self.__setLunarDateBySolarDate(solarYear, solarMonth, solarDay)
+ isValid = True
+ return isValid
+
+ def __getGapJa(self):
+ absDays = self.__getLunarAbsDays(self.lunarYear, self.lunarMonth,
self.lunarDay, self.isIntercalation)
+ if absDays > 0 :
+ self.__gapjaYearInx[0] = ((self.lunarYear + 6) -
self.KOREAN_LUNAR_BASE_YEAR) % len(self.KOREAN_CHEONGAN)
+ self.__gapjaYearInx[1] = ((self.lunarYear + 0) -
self.KOREAN_LUNAR_BASE_YEAR) % len(self.KOREAN_GANJI)
+
+ monthCount = self.lunarMonth
+ monthCount += 12 * (self.lunarYear - self.KOREAN_LUNAR_BASE_YEAR)
+ self.__gapjaMonthInx[0] = (monthCount + 3) %
len(self.KOREAN_CHEONGAN)
+ self.__gapjaMonthInx[1] = (monthCount + 1) % len(self.KOREAN_GANJI)
+
+ self.__gapjaDayInx[0] = (absDays + 4) % len(self.KOREAN_CHEONGAN)
+ self.__gapjaDayInx[1] = (absDays + 2) % len(self.KOREAN_GANJI)
+
+ def getGapJaString(self) :
+ self.__getGapJa()
+ gapjaStr = "%c%c%c %c%c%c %c%c%c" %
(chr(self.KOREAN_CHEONGAN[self.__gapjaYearInx[0]]),
chr(self.KOREAN_GANJI[self.__gapjaYearInx[1]]),
chr(self.KOREAN_GAPJA_UNIT[self.__gapjaYearInx[2]]),
+ chr(self.KOREAN_CHEONGAN[self.__gapjaMonthInx[0]]),
chr(self.KOREAN_GANJI[self.__gapjaMonthInx[1]]),
chr(self.KOREAN_GAPJA_UNIT[self.__gapjaMonthInx[2]]),
+ chr(self.KOREAN_CHEONGAN[self.__gapjaDayInx[0]]),
chr(self.KOREAN_GANJI[self.__gapjaDayInx[1]]),
chr(self.KOREAN_GAPJA_UNIT[self.__gapjaDayInx[2]]))
+
+ if self.isIntercalation == True :
+ gapjaStr += " (%c%c)" % (chr(self.INTERCALATION_STR[0]),
chr(self.KOREAN_GAPJA_UNIT[1]))
+ return gapjaStr
+
+
+ def getChineseGapJaString(self) :
+ self.__getGapJa()
+ gapjaStr = "%c%c%c %c%c%c %c%c%c" %
(chr(self.CHINESE_CHEONGAN[self.__gapjaYearInx[0]]),
chr(self.CHINESE_GANJI[self.__gapjaYearInx[1]]),
chr(self.CHINESE_GAPJA_UNIT[self.__gapjaYearInx[2]]),
+ chr(self.CHINESE_CHEONGAN[self.__gapjaMonthInx[0]]),
chr(self.CHINESE_GANJI[self.__gapjaMonthInx[1]]),
chr(self.CHINESE_GAPJA_UNIT[self.__gapjaMonthInx[2]]),
+ chr(self.CHINESE_CHEONGAN[self.__gapjaDayInx[0]]),
chr(self.CHINESE_GANJI[self.__gapjaDayInx[1]]),
chr(self.CHINESE_GAPJA_UNIT[self.__gapjaDayInx[2]]))
+
+ if self.isIntercalation == True :
+ gapjaStr += " (%c%c)" % (chr(self.INTERCALATION_STR[1]),
chr(self.CHINESE_GAPJA_UNIT[1]))
+ return gapjaStr
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/korean_lunar_calendar-0.2.1/korean_lunar_calendar.egg-info/PKG-INFO
new/korean_lunar_calendar-0.3.1/korean_lunar_calendar.egg-info/PKG-INFO
--- old/korean_lunar_calendar-0.2.1/korean_lunar_calendar.egg-info/PKG-INFO
2020-04-14 16:35:49.000000000 +0200
+++ new/korean_lunar_calendar-0.3.1/korean_lunar_calendar.egg-info/PKG-INFO
2022-09-16 12:44:48.000000000 +0200
@@ -1,105 +1,101 @@
-Metadata-Version: 1.2
-Name: korean-lunar-calendar
-Version: 0.2.1
-Summary: Korean Lunar Calendar
-Home-page: https://github.com/usingsky/korean_lunar_calendar_py
-Author: Jinil Lee
-Author-email: [email protected]
-Maintainer: Jinil Lee
-Maintainer-email: [email protected]
-License: MIT
-Description: korean\_lunar\_calendar\_py
- ===========================
-
- ?????? ????????? ??????
-
- Overview
- ^^^^^^^^
-
- Here is a library to convert Korean lunar-calendar to Gregorian
- calendar.
-
- Korean calendar and Chinese calendar is same lunar calendar but have
- different date.
-
- This follow the KARI(Korea Astronomy and Space Science Institute)
-
- ?????? ????????? ?????? (????????????????????? ??????) - ????????????
?????? ?????????
-
- ?????? ????????? 1391??? 1??? 1??? ?????? 2050??? 11??? 18?????????
??????
-
- ::
-
- Gregorian calendar (1391. 2. 5. ~ 2050. 12. 31) <--> Korean
lunar-calendar (1391. 1. 1. ~ 2050. 11. 18)
-
- Install
- ^^^^^^^
-
- pip install korean\_lunar\_calendar
-
- To use
- ^^^^^^
-
- (0) import module
-
- .. code:: python
-
- from korean_lunar_calendar import KoreanLunarCalendar
-
- (1) Korean Solar Date -> Korean Lunar Date (????????-> ??????)
-
- .. code:: python
-
- calendar = KoreanLunarCalendar()
- # params : year(???), month(???), day(???)
- calendar.setSolarDate(2017, 6, 24)
- # Lunar Date (ISO Format)
- print(calendar.LunarIsoFormat())
- # Korean GapJa String
- print(calendar.getGapJaString())
- # Chinese GapJa String
- print(calendar.getChineseGapJaString())
-
- ::
-
- [Result]
- 2017-05-01 Intercalation
- ????????? ????????? ????????? (??????)
- ????????? ????????? ????????? (??????)
-
- (2) Korean Lunar Date -> Korean Solar Date (????????-> ??????)
-
- .. code:: python
-
- # params : year(???), month(???), day(???),
intercalation(????????????)
- calendar.setLunarDate(1956, 1, 21, False)
- # Solar Date (ISO Format)
- print(calendar.SolarIsoFormat())
- # Korean GapJa String
- print(calendar.getGapJaString())
- # Chinese GapJa String
- print(calendar.getChineseGapJaString())
-
- ::
-
- [Result]
- 1956-03-03
- ????????? ????????? ?????????
- ????????? ????????? ?????????
-
-
-Keywords: calendar,korean,lunar
-Platform: UNKNOWN
-Classifier: Development Status :: 3 - Alpha
-Classifier: Intended Audience :: Developers
-Classifier: Intended Audience :: End Users/Desktop
-Classifier: Topic :: Software Development :: Libraries
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
+Metadata-Version: 2.1
+Name: korean-lunar-calendar
+Version: 0.3.1
+Summary: Korean Lunar Calendar
+Home-page: https://github.com/usingsky/korean_lunar_calendar_py
+Author: Jinil Lee
+Author-email: [email protected]
+Maintainer: Jinil Lee
+Maintainer-email: [email protected]
+License: MIT
+Keywords: calendar,korean,lunar
+Classifier: Development Status :: 3 - Alpha
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: End Users/Desktop
+Classifier: Topic :: Software Development :: Libraries
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 3
+License-File: LICENSE
+
+korean\_lunar\_calendar\_py
+===========================
+
+?????? ????????? ??????
+
+Overview
+^^^^^^^^
+
+Here is a library to convert Korean lunar-calendar to Gregorian
+calendar.
+
+Korean calendar and Chinese calendar is same lunar calendar but have
+different date.
+
+This follow the KARI(Korea Astronomy and Space Science Institute)
+
+?????? ????????? ?????? (????????????????????? ??????) - ???????????? ??????
?????????
+
+?????? ????????? 1000??? 01??? 01??? ?????? 2050??? 11??? 18????????? ??????
+?????? ????????? 1000??? 02??? 13??? ?????? 2050??? 12??? 31????????? ??????
+
+::
+
+ Gregorian calendar (1000-02-13 ~ 2050-12-31) <--> Korean lunar-calendar
(1000-01-01 ~ 2050-11-18)
+
+Install
+^^^^^^^
+
+pip install korean\_lunar\_calendar
+
+To use
+^^^^^^
+
+(0) import module
+
+ .. code:: python
+
+ from korean_lunar_calendar import KoreanLunarCalendar
+
+(1) Korean Solar Date -> Korean Lunar Date (????????-> ??????)
+
+ .. code:: python
+
+ calendar = KoreanLunarCalendar()
+ # params : year(???), month(???), day(???)
+ calendar.setSolarDate(2017, 6, 24)
+ # Lunar Date (ISO Format)
+ print(calendar.LunarIsoFormat())
+ # Korean GapJa String
+ print(calendar.getGapJaString())
+ # Chinese GapJa String
+ print(calendar.getChineseGapJaString())
+
+::
+
+ [Result]
+ 2017-05-01 Intercalation
+ ????????? ????????? ????????? (??????)
+ ????????? ????????? ????????? (??????)
+
+(2) Korean Lunar Date -> Korean Solar Date (????????-> ??????)
+
+ .. code:: python
+
+ # params : year(???), month(???), day(???), intercalation(????????????)
+ calendar.setLunarDate(1956, 1, 21, False)
+ # Solar Date (ISO Format)
+ print(calendar.SolarIsoFormat())
+ # Korean GapJa String
+ print(calendar.getGapJaString())
+ # Chinese GapJa String
+ print(calendar.getChineseGapJaString())
+
+::
+
+ [Result]
+ 1956-03-03
+ ????????? ????????? ?????????
+ ????????? ????????? ?????????
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/korean_lunar_calendar-0.2.1/setup.cfg
new/korean_lunar_calendar-0.3.1/setup.cfg
--- old/korean_lunar_calendar-0.2.1/setup.cfg 2020-04-14 16:35:49.317026600
+0200
+++ new/korean_lunar_calendar-0.3.1/setup.cfg 2022-09-16 12:44:48.979372700
+0200
@@ -1,7 +1,7 @@
-[metadata]
-description-file = README.rst
-
-[egg_info]
-tag_build =
-tag_date = 0
-
+[metadata]
+description-file = README.rst
+
+[egg_info]
+tag_build =
+tag_date = 0
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/korean_lunar_calendar-0.2.1/setup.py
new/korean_lunar_calendar-0.3.1/setup.py
--- old/korean_lunar_calendar-0.2.1/setup.py 2020-04-14 15:59:44.000000000
+0200
+++ new/korean_lunar_calendar-0.3.1/setup.py 2022-09-16 11:58:59.000000000
+0200
@@ -1,44 +1,39 @@
-# -*- coding: utf-8 -*-
-
-# Always prefer setuptools over distutils
-from setuptools import setup, find_packages
-# To use a consistent encoding
-from codecs import open
-from os import path
-
-from korean_lunar_calendar import __version__
-
-here = path.abspath(path.dirname(__file__))
-
-with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
- long_description = f.read()
-
-setup(
- name='korean_lunar_calendar',
- version=__version__,
- description='Korean Lunar Calendar',
- long_description=long_description,
- packages=find_packages(exclude=["*.tests", "*.tests.*", "tests.*",
"tests"]),
- url='https://github.com/usingsky/korean_lunar_calendar_py',
- author='Jinil Lee',
- author_email='[email protected]',
- maintainer='Jinil Lee',
- maintainer_email='[email protected]',
- keywords=['calendar', 'korean', 'lunar'],
- license='MIT',
- classifiers=[
- 'Development Status :: 3 - Alpha',
- 'Intended Audience :: Developers',
- 'Intended Audience :: End Users/Desktop',
- 'Topic :: Software Development :: Libraries',
- 'License :: OSI Approved :: MIT License',
- 'Operating System :: OS Independent',
- 'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.4',
- 'Programming Language :: Python :: 3.5',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: 3.7',
- ]
-)
+# -*- coding: utf-8 -*-
+
+# Always prefer setuptools over distutils
+from setuptools import setup, find_packages
+# To use a consistent encoding
+from codecs import open
+from os import path
+
+from korean_lunar_calendar import __version__
+
+here = path.abspath(path.dirname(__file__))
+
+with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
+ long_description = f.read()
+
+setup(
+ name='korean_lunar_calendar',
+ version=__version__,
+ description='Korean Lunar Calendar',
+ long_description=long_description,
+ packages=find_packages(exclude=["*.tests", "*.tests.*", "tests.*",
"tests"]),
+ url='https://github.com/usingsky/korean_lunar_calendar_py',
+ author='Jinil Lee',
+ author_email='[email protected]',
+ maintainer='Jinil Lee',
+ maintainer_email='[email protected]',
+ keywords=['calendar', 'korean', 'lunar'],
+ license='MIT',
+ classifiers=[
+ 'Development Status :: 3 - Alpha',
+ 'Intended Audience :: Developers',
+ 'Intended Audience :: End Users/Desktop',
+ 'Topic :: Software Development :: Libraries',
+ 'License :: OSI Approved :: MIT License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 3',
+ ]
+)