Skip to main content

A library to handle the Chinese calendar

Project description

Lunisolar is a Python package for handling Chinese calendars. Lunisolar contains a set of helper functions designed to make it easy to convert between the Gregorian (Western) calendar and the Chinese calendar.

Based on the works of Helmer Aslaksen. Built on top of PyCalCal, the Python implementation of Calendrica 3.0, a set of calendar-related algorithms as described in Dershowitz and Reingold’s book “Calendrical Calculations”.

Usage

Initializing a Chinese date:

>>> from lunisolar import ChineseDate
>>> mid_autumn = ChineseDate.from_chinese(chinese_year=2013,
                                          chinese_month=8,
                                          chinese_day=15,
                                          is_leap_month=False)
>>> mid_autumn
chinese_date(year=2013, month=8, day=15, is_leap_month=False)
>>> mid_autumn.gregorian_date
datetime.date(2013, 9, 19)

A Chinese date object can be initialized from a Gregorian (western) date:

>>> from lunisolar import ChineseDate
>>> moon_landing = ChineseDate.from_gregorian(1969, 7, 20)
>>> moon_landing
chinese_date(year=1969, month=6, day=7, is_leap_month=False)

The ChineseDate class shares the same constructors as datetime.date:

>>> ChineseDate.today()
chinese_date(year=2012, month=12, day=29, is_leap_month=False)

>>> timestamp = 1360414893.724195
>>> ChineseDate.fromtimestamp(timestamp)
chinese_date(year=2012, month=12, day=29, is_leap_month=False)

>>> ordinal = 734908
>>> ChineseDate.fromordinal(ordinal)
chinese_date(year=2012, month=12, day=29, is_leap_month=False)

Retrieving properties of the Chinese calendar:

>>> moon_landing = ChineseDate.from_gregorian(1969, 7, 20)
>>> moon_landing.year
1969
>>> moon_landing.month
6
>>> moon_landing.day
7
>>> moon_landing.is_leap_month
False
>>> moon_landing.zodiac
rooster
>>> moon_landing.element
earth
>>> moon_landing.heavenly_stem
ji
>>> moon_landing.earthly_branch
you

The add, subtract, and comparison operators for ChineseDate is similar to that of the datetime.date object. For subtraction and comparison, ChineseDate and datetime.date can be used interchangeably.

>>> from datetime import timedelta
>>> cdate = ChineseDate.from_gregorian(1969, 7, 20)
>>> gdate = datetime.date(2013, 2, 10)
>>> cdate > gdate
False
>>> gdate - cdate
datetime.timedelta(15911)
>>> diff = timedelta(200)
>>> cdate + diff
chinese_date(year=1969, month=12, day=29, is_leap_month=False)

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

lunisolar-0.1.3.tar.gz (48.7 kB view details)

Uploaded Source

File details

Details for the file lunisolar-0.1.3.tar.gz.

File metadata

  • Download URL: lunisolar-0.1.3.tar.gz
  • Upload date:
  • Size: 48.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for lunisolar-0.1.3.tar.gz
Algorithm Hash digest
SHA256 11be2162910e341749c0f93151ee1a3bbe2a850c1da1e46af1e762ee348e20f4
MD5 014c0726b492126b29fd215649179e31
BLAKE2b-256 77cab2bb9d44593e3c2dcac9a36f942f28718914c224709f1c52639e85ccda50

See more details on using hashes here.

Supported by

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