Skip to main content

A lunar calendar converter, including a number of lunar and solar holidays, mainly from China.

Project description

Last stable version (PyPI) build status

Note: This library is a fork of LunarCalendar and is maintained as a continuation of the original project.

Overview

Chinese version(中文版) is provided.

LunarCalendarX 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.

LunarCalendarX 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.

LunarCalendarX is inspired by Lunar-Solar-Calendar-Converter.

Features

  • Accurate raw data, synchronize with Microsolf’s ChineseLunisolarCalendar class

  • Easy to extend festivals and languages, supported both zh_hans and zh_hant

  • Included Lunar Festivals, such as: MidAutumn Festival, Chinese New Year Eve, DragonBoat Festivals

  • Included Solar Festivals without fixed dates, such as: Mother’s Day, Easter

  • Added legality check of the lunar and solar date

  • Supported 24 solar terms(立春/春分/清明/冬至等)

Install

LunarCalendarX can be installed from the PyPI with pip:

$ pip install LunarCalendarX

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

For Windows, maybe you should install Microsoft Build Tools first. It will help you building c++ code for ephem library, which LunarCalendarX includes for 24-solar-terms calculation.

Console Commands

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.

$ 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:

$ lunar-find all 2019
$ lunar-find festival 2012
$ lunar-find 节日 2012
$ lunar-find solarterm
$ lunar-find 节气

Quickstart

Solar to Lunar:

import datetime
from lunarcalendarx 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:

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:

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).

from lunarcalendarx.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:

......
母亲节 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
......

Contribution

Including festival standards:

  • Common festivals in the the country, such as: Christmas, Halloween, etc.

  • Lunar festivals.

  • Solar festivals without fixed dates, such as: Mother’s Day, Easter, etc.

Supporting Chinese and English only now. If you want to add Korean, Japanese or Vietnamese supports, modify lunarcalendarx/festival.py to add festivals and languages.

Some unusual festivals may not be included, welcome to extend.

About

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lunarcalendarx-1.0.1.tar.gz (22.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lunarcalendarx-1.0.1-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file lunarcalendarx-1.0.1.tar.gz.

File metadata

  • Download URL: lunarcalendarx-1.0.1.tar.gz
  • Upload date:
  • Size: 22.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for lunarcalendarx-1.0.1.tar.gz
Algorithm Hash digest
SHA256 545556bc4b14256ecad7e994f605fbae1f5d393b46c1833c49b72701e480de27
MD5 b2b5fe27b692c250bb6ece364a4eff79
BLAKE2b-256 9109982afbd553e97c506f8c2828f2d941f8ca6ee16af4491651ed8ff233c807

See more details on using hashes here.

File details

Details for the file lunarcalendarx-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: lunarcalendarx-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for lunarcalendarx-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2bcbb8edb0a787bdce25874156dcb898b49938582f3fdeede3292de5c2ded72b
MD5 831fdd445361fbbb4437399c23efb8e2
BLAKE2b-256 bf7303d260c7ac2ab893122ceaa974a5f9da5e166d23de0ab00467a971a0e7b9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page