252 lines
6.9 KiB
Plaintext
252 lines
6.9 KiB
Plaintext
|
Metadata-Version: 2.1
|
||
|
Name: convertdate
|
||
|
Version: 2.2.0
|
||
|
Summary: Converts between Gregorian dates and other calendar systems.Calendars included: Baha'i, French Republican, Hebrew, Indian Civil, Islamic, ISO, Julian, Mayan and Persian.
|
||
|
Home-page: https://github.com/fitnr/convertdate
|
||
|
Author: Neil Freeman
|
||
|
Author-email: contact@fakeisthenewreal.org
|
||
|
License: MIT
|
||
|
Platform: UNKNOWN
|
||
|
Classifier: Programming Language :: Python
|
||
|
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
|
||
|
Classifier: Programming Language :: Python :: 3.8
|
||
|
Classifier: Topic :: Religion
|
||
|
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
||
|
Classifier: Operating System :: OS Independent
|
||
|
Classifier: License :: OSI Approved :: MIT License
|
||
|
Description-Content-Type: text/markdown
|
||
|
Requires-Dist: pytz (<2020,>=2014.10)
|
||
|
Requires-Dist: pymeeus (<=1,>=0.3.6)
|
||
|
|
||
|
convertdate
|
||
|
===========
|
||
|
|
||
|
The convertdate package was originally developed as "[Python Date
|
||
|
Utils](http://sourceforge.net/projects/pythondateutil/)" by Phil
|
||
|
Schwartz. It had been significantly updated and expanded.
|
||
|
|
||
|
Available calendars:
|
||
|
|
||
|
- Bahai
|
||
|
- Coptic (Alexandrian)
|
||
|
- French Republican
|
||
|
- Gregorian
|
||
|
- Hebrew
|
||
|
- Indian Civil
|
||
|
- Islamic
|
||
|
- Julian
|
||
|
- Mayan
|
||
|
- Persian
|
||
|
- Positivist
|
||
|
- Mayan
|
||
|
- ISO
|
||
|
- Ordinal (day of year)
|
||
|
- Dublin day count
|
||
|
- Julian day count
|
||
|
|
||
|
The `holidays` module also provides some useful holiday-calculation,
|
||
|
with a focus on North American and Jewish holidays.
|
||
|
|
||
|
Installing
|
||
|
----------
|
||
|
|
||
|
`pip install convertdate`
|
||
|
|
||
|
Or download the package and run `python setup.py install`.
|
||
|
|
||
|
Using
|
||
|
-----
|
||
|
|
||
|
from convertdate import french_republican
|
||
|
from convertdate import hebrew
|
||
|
|
||
|
french_republican.from_gregorian(2014, 10, 31)
|
||
|
# (223, 2, 1, 9)
|
||
|
|
||
|
hebrew.from_gregorian(2014, 10, 31)
|
||
|
# (5775, 8, 7)
|
||
|
|
||
|
Note that in some calendar systems, the day begins at sundown.
|
||
|
Convertdate gives the conversion for noon of the day in question.
|
||
|
|
||
|
Each module includes a monthcalendar function, which will generate a
|
||
|
calender-like nested list for a year and month (each list of dates runs
|
||
|
from Sunday to Saturday)
|
||
|
|
||
|
hebrew.monthcalendar(5775, 8)
|
||
|
# [
|
||
|
# [None, None, None, None, None, None, 1],
|
||
|
# [2, 3, 4, 5, 6, 7, 8],
|
||
|
# [9, 10, 11, 12, 13, 14, 15],
|
||
|
# [16, 17, 18, 19, 20, 21, 22],
|
||
|
# [23, 24, 25, 26, 27, 28, 29]
|
||
|
# ]
|
||
|
|
||
|
julian.monthcalendar(2015, 1)
|
||
|
# [
|
||
|
# [None, None, None, 1, 2, 3, 4],
|
||
|
# [5, 6, 7, 8, 9, 10, 11],
|
||
|
# [12, 13, 14, 15, 16, 17, 18],
|
||
|
# [19, 20, 21, 22, 23, 24, 25],
|
||
|
# [26, 27, 28, 29, 30, 31, None]
|
||
|
# ]
|
||
|
|
||
|
Special Options
|
||
|
---------------
|
||
|
|
||
|
### French Republican
|
||
|
|
||
|
Leap year calculations in the French Republican calendar are a matter of
|
||
|
dispute. By default, `convertdate` calculates leap years using the
|
||
|
autumnal equinox. You can also use one of three more systematic methods
|
||
|
proposed over the years.
|
||
|
|
||
|
- Romme, a co-creator of the calendar, proposed leap years in years
|
||
|
divisible by four, except for years divisible by 100.
|
||
|
- Some concordances were drawn up in the 19th century that gave leap
|
||
|
years every 4 years, in years that give a remainder of three when
|
||
|
divided by four (19, 23, 27, etc...).
|
||
|
- Von Mädler proposed leap years in years divisible by four, except
|
||
|
for years divisible by 128.
|
||
|
|
||
|
You can specify any of these three methods with the method keyword
|
||
|
argument in `french_republican` conversion functions.
|
||
|
|
||
|
from convertdate import french_republican
|
||
|
|
||
|
# Romme's method
|
||
|
french_republican.to_gregorian(20, 1, 1), method='romme')
|
||
|
# (1811, 9, 23)
|
||
|
|
||
|
# continuous method
|
||
|
french_republican.to_gregorian(20, 1, 1), method='continuous')
|
||
|
# (1811, 9, 24)
|
||
|
|
||
|
# von Madler's method
|
||
|
french_republican.to_gregorian(20, 1, 1), method='madler')
|
||
|
# (1811, 9, 23)
|
||
|
|
||
|
All the conversion methods correctly assign the leap years implemented
|
||
|
while calendar was in use (3, 7, 11).
|
||
|
|
||
|
Baha'i
|
||
|
------
|
||
|
|
||
|
The Bahá'í (Badí) calendar has an intercalary period, Ayyam-i-Há, which occurs between the 18th and 19th months.
|
||
|
Dates in this period are returned as month 19, and the month of ‘Alá is reported as month 20.
|
||
|
|
||
|
```python
|
||
|
from convertdate import bahai
|
||
|
# the first day of Ayyam-i-Ha:
|
||
|
bahai.to_gregorian(175, 19, 1)
|
||
|
# (2019, 2, 11)
|
||
|
# The first day of 'Ala:
|
||
|
bahai.to_gregorian(175, 20, 1)
|
||
|
# (2019, 3, 2)
|
||
|
```
|
||
|
|
||
|
Before the Common Era
|
||
|
---------------------
|
||
|
|
||
|
For dates before the Common Era (year 1), `convertdate` uses
|
||
|
astronomical notation: 1 BC is recorded as 0, 2 BC is -1, etc. This
|
||
|
makes arithmatic much easier at the expense of ignoring custom.
|
||
|
|
||
|
Note that for dates before 4 CE, `convertdate` uses the [proleptic
|
||
|
Julian
|
||
|
calendar](https://en.wikipedia.org/wiki/Proleptic_Julian_calendar). The
|
||
|
Julian Calendar was in use from 45 BC, but before 4 CE the leap year
|
||
|
leap year pattern was irregular.
|
||
|
|
||
|
The [proleptic Gregorian
|
||
|
calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar) is
|
||
|
used for dates before 1582 CE, the year of the Gregorian calendar
|
||
|
reform.
|
||
|
|
||
|
Holidays
|
||
|
--------
|
||
|
|
||
|
North American holidays are the current focus of the `holidays` module,
|
||
|
but pull requests are welcome.
|
||
|
|
||
|
from convertdate import holidays
|
||
|
|
||
|
# For simplicity, functions in the holidays module return a tuple
|
||
|
# In the format (year, month, day)
|
||
|
|
||
|
holidays.new_years(2014)
|
||
|
# (2014, 1, 1)
|
||
|
|
||
|
holidays.memorial_day(2014)
|
||
|
# (2014, 5, 26)
|
||
|
|
||
|
# USA is default
|
||
|
holidays.thanksgiving(2014)
|
||
|
# (2014, 11, 27)
|
||
|
|
||
|
# But there is a Canadian option for some holidays
|
||
|
holidays.thanksgiving(2014, 'canada')
|
||
|
# (2014, 10, 13)
|
||
|
|
||
|
# Mexican national holidays
|
||
|
holidays.natalicio_benito_juarez(2016)
|
||
|
# (2016, 3, 21)
|
||
|
|
||
|
holidays.dia_revolucion(2016)
|
||
|
# (2016, 11, 21)
|
||
|
|
||
|
# Some Jewish holidays are included
|
||
|
holidays.rosh_hashanah(2014)
|
||
|
|
||
|
Utils
|
||
|
-----
|
||
|
|
||
|
Convertdate includes some utilities for manipulating and calculating
|
||
|
dates.
|
||
|
|
||
|
from convertdate import utils
|
||
|
|
||
|
# Calculate an arbitrary day of the week
|
||
|
THUR = 3
|
||
|
APRIL = 4
|
||
|
|
||
|
# 3rd Thursday in April
|
||
|
utils.nth_day_of_month(3, THUR, APRIL, 2014)
|
||
|
# (2014, 4, 17)
|
||
|
|
||
|
utils.nth_day_of_month(5, THUR, APRIL, 2014)
|
||
|
# IndexError: No 5th day of month 4
|
||
|
|
||
|
# Use 0 for the first argument to get the last weekday of a month
|
||
|
utils.nth_day_of_month(0, THUR, APRIL, 2014)
|
||
|
# (2014, 4, 24)
|
||
|
|
||
|
Note that when calculating weekdays, convertdate uses the convention of
|
||
|
the calendar and time modules: Monday is 0, Sunday is 6.
|
||
|
|
||
|
from convertdate import gregorian
|
||
|
|
||
|
SUN = 6
|
||
|
|
||
|
day = gregorian.to_jd(2014, 4, 17)
|
||
|
nextsunday = utils.next_weekday(SUN, day)
|
||
|
|
||
|
gregorian.from_jd(nextsunday)
|
||
|
# (2014, 4, 20)
|
||
|
|
||
|
Other utility functions:
|
||
|
|
||
|
- nearest\_weekday
|
||
|
- next\_or\_current\_weekday
|
||
|
- previous\_weekday
|
||
|
- previous\_or\_current\_weekday
|
||
|
|
||
|
|
||
|
|