A lunar calendar converter, including a number of lunar and solar holidays, mainly from China.
.. image:: https://img.shields.io/pypi/v/LunarCalendar.svg :target: https://pypi.python.org/pypi/LunarCalendar :alt: Last stable version (PyPI)
.. image:: https://travis-ci.org/wolfhong/LunarCalendar.svg :target: https://travis-ci.org/wolfhong/LunarCalendar :alt: build status
Chinese version(中文版) <https://github.com/wolfhong/LunarCalendar/blob/develop/README_zh.rst>
_ is provided.
LunarCalendar is a Lunar-Solar Converter, containing a number of lunar and solar festivals in China.
Korean, Japanese or Vietnamese lunar calendar is the same as Chinese calendar, but has different festivals. Korean, Japanese and Vietnamese festivals can be easily included, with their languages.
LunarCalendar supports a time range of 1900 to 2100, which may be enough for a long time.
But if you have needs for a wider time range, you can use generate.html
to extend it.
LunarCalendar is inspired by Lunar-Solar-Calendar-Converter <https://github.com/isee15/Lunar-Solar-Calendar-Converter>
_.
ChineseLunisolarCalendar
classzh_hans
and zh_hant
LunarCalendar can be installed from the PyPI with easy_install
::
$ easy_install LunarCalendar
Or pip::
$ pip install LunarCalendar
If you encounter an error like command 'gcc' failed with exit status 1 while installing ephem
, maybe you should install python-devel
first.
For CentOS::
$ yum install python-devel
For Ubuntu::
$ apt-get install python-dev
A console command called lunar-find
can be used to find the date of the festival, using it's chinese name.
Default to this year. Supporting alias of the festival.
.. code-block:: console
$ lunar-find 重阳
重阳节 on 2018: 2018-10-17
$ lunar-find 重陽節
重阳节 on 2018: 2018-10-17
$ lunar-find 登高节 2019
重阳节 on 2019: 2019-10-07
You can also print all included festivals or 24 solar terms by date asc with:
.. code-block:: console
$ lunar-find all 2019
$ lunar-find festival 2012
$ lunar-find 节日 2012
$ lunar-find solarterm
$ lunar-find 节气
Solar to Lunar:
.. code-block:: python
import datetime
from lunarcalendar import Converter, Solar, Lunar, DateNotExist
solar = Solar(2018, 1, 1)
print(solar)
lunar = Converter.Solar2Lunar(solar)
print(lunar)
solar = Converter.Lunar2Solar(lunar)
print(solar)
print(solar.to_date(), type(solar.to_date()))
Lunar to Solar:
.. code-block:: python
lunar = Lunar(2018, 2, 30, isleap=False)
print(lunar)
solar = Converter.Lunar2Solar(lunar)
print(solar)
lunar = Converter.Solar2Lunar(solar)
print(lunar)
print(lunar.to_date(), type(lunar.to_date()))
print(Lunar.from_date(datetime.date(2018, 4, 15)))
Legality check for solar and lunar date. 2018-2-15(Leap Month) does not exist, but 2012-4-4(Leap Month) exists:
.. code-block:: python
Lunar(2012, 4, 4, isleap=True) # date(2012, 5, 24)
try:
lunar = Lunar(2018, 2, 15, isleap=True)
except DateNotExist:
print(traceback.format_exc())
Print all the festivals included, with Chinese and English. Other languages are welcome to extend(Fork & Pull Request).
.. code-block:: python
from lunarcalendar.festival import festivals
# print festivals, using English or Chinese
print("----- print all festivals on 2018 in chinese: -----")
for fest in festivals:
print(fest.get_lang('zh'), fest(2018))
print("----- print all festivals on 2017 in english: -----")
for fest in festivals:
print(fest.get_lang('en'), fest(2017))
Output:
.. code-block:: shell
......
母亲节 2018-05-13
父亲节 2018-06-17
中秋节 2018-09-24
感恩节 2018-11-22
重阳节 2018-10-17
春节 2018-02-16
中元节 2018-08-25
七夕节 2018-08-17
腊八节 2019-01-13
清明节 2018-04-05
除夕 2019-02-04
寒衣节 2018-11-08
元宵节 2018-03-02
龙抬头 2018-03-18
端午节 2018-06-18
......
Including festival standards:
Supporting Chinese and English only now. If you want to add Korean, Japanese or Vietnamese supports, modify lunarcalendar/festival.py
to add festivals and languages.
Some unusual festivals may not be included, welcome to extend <https://github.com/wolfhong/LunarCalendar/issues>
_.
Homepage <http://github.com/wolfhong/LunarCalendar>
_PyPI <https://pypi.python.org/pypi/LunarCalendar>
_Issue tracker <https://github.com/wolfhong/LunarCalendar/issues?status=new&status=open>
_