# pythaidate: Thai Calendar Systems for Python
![PyPI - License](https://img.shields.io/pypi/l/pythaidate)
![PyPI - Version](https://img.shields.io/pypi/v/pythaidate)
Thailand has used several calendar systems during its history with several still in use today. This library provides `datetime.date`-like classes for working with the Thai lunisolar calendar of the Chulasakarat Era (จุลศักราช) and the lunar Pakkhakhananaa calendar (ปฏิทินปักขคณนา).
# Installation
```
$ python3 -m pip install pythaidate
```
# Examples
## `CsDate`: Chulasakarat Date
`CsDate` objects can be created from a year, month, day triple, like a `datetime.date` object. They represent the Thai lunisolar calendar with the epoch of 22nd March 638 AD. Months should be specified in Sukothai number format (eg. 5 is the first month). The example here specifies month 1 which, according to Sukothai numbering, is the 9th month in the year (although the 10th month in a year with intercalary month). Intercalary months (อธิกมาส) are specified as 88.
```
>>> from pythaidate import CsDate
>>> cs = CsDate(1361, 1, 24)
>>> cs.year, cs.month, cs.day
(1361, 1, 24)
```
The `days` property gives the zero-indexed count of days since new years day.
```
>>> cs.days
260
```
The `horakhun` (หรคุฌ) property gives the days since the epoch and `julianday` gives the Julian Day Number, useful for converting between calendar formats.
```
>>> cs.horakhun
497378
>>> cs.julianday
2451545
```
Other properties show the internal calculation values:
* `kammabucala`: (กัมมัขผล) the excess of solar days over whole solar days
* `masaken`: (มาสเกฌฑ์) The number of lunar months since the epoch
* `uccapon`: (อุจจพล) The measure of the position of the Moon's apogee (furthest distance from the Earth). It increases by one unit a day to a maximum of 3232.
* `avoman`: (อวมาน) The excess of lunar days over solar days in units of 1/692 of a lunar day modulus 692, increasing by 11 units each solar day. It is used to determine when to add intercalary days in the calendar
* `tithi`: (ดิถี) a lunar day, equal to 1/30th of a synodic month
The year and day count since new years day can also be used to create a `CsDate` object with the `fromyd` class method:
```
>>> cs = CsDate.fromyd(1361, 260)
>>> cs.julianday
2451545
```
Similarly, a `CsDate` object can be created from the Julian Day Number:
```
>>> cs = CsDate.fromjulianday(2451545)
>>> cs.year, cs.month, cs.day
(1361, 1, 24)
```
A `CsDate` can be displayed as text with `.csformat()` or by converting the object to a string:
```
>>> cs.csformat()
'วันเสาร์ เดือน ๑ แรม ๙ ค่ำ ปีเถาะ จ.ศ.๑๓๖๑'
>>> str(cs)
'วันเสาร์ เดือน ๑ แรม ๙ ค่ำ ปีเถาะ จ.ศ.๑๓๖๑'
```
`CsDate` objects have 3 properties for intercalations and a day count:
* `solar_leap_year`: for the solar leap year (อธิกสุรทิน)
* `leap_day`: for the lunar intercalary day (อธิกวาร)
* `leap_month`: for the lunar intercalary month (อธิกมาส)
* `days_in_year`: returns the number of days in the year. This will be one of:
* 354: no intercalations (ปกติมาส ปกติวาร)
* 355: intercalary month, no intercalary day (ปกติมาส อธิกวาร)
* 384: no intercalary month, intercalary day (อธิกมาส ปกติวาร)
In the Thai lunisolar calendar system a year can only have either zero or one intercalations. There can't be both an intercalary day (อธิกวาร) and month (อธิกมาส) in the same year.
```
>>> cs.solar_leap_year
False
>>> cs.leap_day
False
>>> cs.leap_month
True
>>> cs.days_in_year
384
```
## `PakDate`: Pakkhakhananaa Date
Create a `PakDate` object from a pakcode. The `1-` prefix is the cycle number (1-indexed), followed by the ปักขคณนา, สัมพยุหะ, พยุหะ, สมุหะ, วรรค and day of moon phase. The Pakkhakhananaa cycle repeats every 289,577 days.
```
>>> from pythaidate import PakDate
>>> p = PakDate(pakcode="1-6:11:5:2:2:10")
>>> p.horakhun
96398
>>> p.julianday
2451545
>>> p.iswanphra
False
```
Note that the `horakhun` value from Pakkhakhananaa lunar and (Chulasakarat era) lunisolar calendars are not compatible as they represent day count since the epoch of each calendar. For comparisons use `julianday` instead. `iswanphra` has an alias `issabbath`.
The Pakkhakhananaa code and abbreviations are available:
```
>>> p.pakcode
'1-6:11:5:2:2:10'
>>> print(p.pakabbr)
๖๑๕ข๒
๑
```
Pakkhakhananaa can be created from a `datetime.date` object:
```
>>> from datetime import date
>>> from pythaidate import PakDate
>>> p = PakDate(date=date(2000, 1, 1))
>>> p.julianday
2451545
```
...and from Julian Day Number:
```
>>> from pythaidate import PakDate
>>> p = PakDate(jd=2451545)
>>> p.julianday
2451545
>>> p.pakcode
'1-6:11:5:2:2:10'
```
`pakboard()` will display an ASCII Pakkhakhananaa board (กระดานปักขคณนา) and (best viewed with a fixed-width font):
```
>>> p.pakboard()
๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๑๐ ๑๑ ๑๒ ๑๓ ๑๔ ๑๕ ๑๖ ๑๗ ๑๘
ปักขคณนา ม ม ม ม ม ม ม ม ม ม ม ม ม ม ม ม ม จ
มหาสัมพยุหะ จ จ จ จ จ จ จ จ จ จ ม
จุลสัมพยุหะ จ จ จ จ จ จ จ จ จ ม
มหาพยุหะ ม ม ม ม ม ม จ
จุลพยุหะ ม ม ม ม ม จ
มหาสมุหะ จ จ จ ม
จุลสมุหะ จ จ ม
มหาวรรค ม ม ม ม จ
จุลวรรค ม ม ม จ
มหาปักข์ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๑๐ ๑๑ ๑๒ ๑๓ ๑๔ ๑๕
จุลปักข์ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๑๐ ๑๑ ๑๒ ๑๓ ๑๔
รอบที่ ๑ หรคุณปักขคณนา ๙๖๓๙๘ ปักขเกณฑ์ ๖๕๒๙
```
## Julian Day Number (JDN) helpers
* `to_julianday(year, month, day)`: Returns JDN from a year, month, day triple
* `from_julianday(jd)`: Returns a year, month, day triple from a JDN
* `today()`: returns JDN for today
* `date_to_julianday(d)`: converts `datetime.date` object or other object with a `julianday` property to JDN
* `julianday_to_date(jd)`: converts JDN to a `datetime.date` object
## `pythaidate.date`: A `datetime.date` subclass
`pythaidate.date` is a simple subclass of `datetime.date` with an added `.julianday` property:
```
>>> from pythaidate import date
>>> d = date(2000, 1, 1)
>>> d.julianday
2451545
```
# Limitations
## General
* Tested and supported on Python 3.8 - 3.12.
## Chulasakarat Era Lunisolar Calendar
* The determination of which years are intercalary has been a somewhat subjective process and changed over the centuries, along with regional variations too. This library produces 7 intercalary months per 19 year period and 11 intercalary days per 57 years. This maintains the overall "pace" of the calendar but there may be slight short-term deviations from other calendars. But don't worry, those other calendars are just as wrong too - there's no definitive reference calendar.
* Currently only supports Sukothai-style month numbering (eg. first month of the year is month 5)
* `strftime` and `strptime` are not implemented
# Selected References
## Thai
* หลวงวิศาลดรุณกร (อั้น สาริกบุตร) (1997) คัมภีร์โหราศาสตร์ไทย มาตรฐาน ฉบับสมบูรณ์. Thailand: ศรีปัญญา, สนพ.
* [ความรู้เรื่องปักขคณนา ตําราการคํานวณปฏิทินทางจันทรคติ](https://archive.org/details/unset0000unse_d6m6). (1999). Thailand: มูลนิธิมหามกุฏราชวิทยาลัยฯ.
## English
* Eade, J.C. (2018). The Calendrical Systems of Mainland South-East Asia. Netherlands: Brill.
* Gislén L., Eade, J.C. (2019). The Calendars of Southeast Asia 2: Burma, Thailand, Laos and Cambodia. Journal of Astronomical History and Heritage, 22(3).
## French
* Faraut, F. G. (1910). [Astronomie cambodgienne](https://archive.org/details/farraut0astonomiecambodgienne). Vietnam: Imprimerie F.-H. Schneider.
* Billard, R. L'Astronomie Indienne. Investigation des Textes Sanskrits et des Donnees Numeriques. Paris: Ecole francaise d'extreme-orient. (1971).
# Other Resources
* [NASA's Julian Day Number Calculator](https://core2.gsfc.nasa.gov/time/julian.html)
* [ปฏิทินปักขคณนา.com](https://xn--12ccg5bxauoekd6vraqb.com/)
# Contributors
* Mark Hollow <dev {at} hmmbug.com> (Project Owner)
Raw data
{
"_id": null,
"home_page": "https://github.com/hmmbug/pythaidate",
"name": "pythaidate",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8, <4",
"maintainer_email": "",
"keywords": "date,calendar,thai,development,library",
"author": "Mark Hollow",
"author_email": "dev@hmmbug.com",
"download_url": "https://files.pythonhosted.org/packages/d8/5b/7b72b88b0ad9db26117206b0a4a8a695ec5e696c45d90f3cf75e4dfc54ac/pythaidate-0.2.0.tar.gz",
"platform": null,
"description": "# pythaidate: Thai Calendar Systems for Python\n\n![PyPI - License](https://img.shields.io/pypi/l/pythaidate)\n![PyPI - Version](https://img.shields.io/pypi/v/pythaidate)\n\nThailand has used several calendar systems during its history with several still in use today. This library provides `datetime.date`-like classes for working with the Thai lunisolar calendar of the Chulasakarat Era (\u0e08\u0e38\u0e25\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a) and the lunar Pakkhakhananaa calendar (\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e1b\u0e31\u0e01\u0e02\u0e04\u0e13\u0e19\u0e32).\n\n# Installation\n\n```\n$ python3 -m pip install pythaidate\n```\n\n# Examples\n\n## `CsDate`: Chulasakarat Date\n\n`CsDate` objects can be created from a year, month, day triple, like a `datetime.date` object. They represent the Thai lunisolar calendar with the epoch of 22nd March 638 AD. Months should be specified in Sukothai number format (eg. 5 is the first month). The example here specifies month 1 which, according to Sukothai numbering, is the 9th month in the year (although the 10th month in a year with intercalary month). Intercalary months (\u0e2d\u0e18\u0e34\u0e01\u0e21\u0e32\u0e2a) are specified as 88.\n\n```\n>>> from pythaidate import CsDate\n>>> cs = CsDate(1361, 1, 24)\n>>> cs.year, cs.month, cs.day\n(1361, 1, 24)\n```\n\nThe `days` property gives the zero-indexed count of days since new years day.\n```\n>>> cs.days\n260\n```\n\nThe `horakhun` (\u0e2b\u0e23\u0e04\u0e38\u0e0c) property gives the days since the epoch and `julianday` gives the Julian Day Number, useful for converting between calendar formats.\n```\n>>> cs.horakhun\n497378\n>>> cs.julianday\n2451545\n```\n\nOther properties show the internal calculation values:\n* `kammabucala`: (\u0e01\u0e31\u0e21\u0e21\u0e31\u0e02\u0e1c\u0e25) the excess of solar days over whole solar days\n* `masaken`: (\u0e21\u0e32\u0e2a\u0e40\u0e01\u0e0c\u0e11\u0e4c) The number of lunar months since the epoch\n* `uccapon`: (\u0e2d\u0e38\u0e08\u0e08\u0e1e\u0e25) The measure of the position of the Moon's apogee (furthest distance from the Earth). It increases by one unit a day to a maximum of 3232.\n* `avoman`: (\u0e2d\u0e27\u0e21\u0e32\u0e19) The excess of lunar days over solar days in units of 1/692 of a lunar day modulus 692, increasing by 11 units each solar day. It is used to determine when to add intercalary days in the calendar\n* `tithi`: (\u0e14\u0e34\u0e16\u0e35) a lunar day, equal to 1/30th of a synodic month\n\nThe year and day count since new years day can also be used to create a `CsDate` object with the `fromyd` class method:\n```\n>>> cs = CsDate.fromyd(1361, 260)\n>>> cs.julianday\n2451545\n```\n\nSimilarly, a `CsDate` object can be created from the Julian Day Number:\n```\n>>> cs = CsDate.fromjulianday(2451545)\n>>> cs.year, cs.month, cs.day\n(1361, 1, 24)\n```\n\nA `CsDate` can be displayed as text with `.csformat()` or by converting the object to a string:\n```\n>>> cs.csformat()\n'\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c \u0e40\u0e14\u0e37\u0e2d\u0e19 \u0e51 \u0e41\u0e23\u0e21 \u0e59 \u0e04\u0e48\u0e33 \u0e1b\u0e35\u0e40\u0e16\u0e32\u0e30 \u0e08.\u0e28.\u0e51\u0e53\u0e56\u0e51'\n>>> str(cs)\n'\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c \u0e40\u0e14\u0e37\u0e2d\u0e19 \u0e51 \u0e41\u0e23\u0e21 \u0e59 \u0e04\u0e48\u0e33 \u0e1b\u0e35\u0e40\u0e16\u0e32\u0e30 \u0e08.\u0e28.\u0e51\u0e53\u0e56\u0e51'\n```\n\n`CsDate` objects have 3 properties for intercalations and a day count:\n* `solar_leap_year`: for the solar leap year (\u0e2d\u0e18\u0e34\u0e01\u0e2a\u0e38\u0e23\u0e17\u0e34\u0e19)\n* `leap_day`: for the lunar intercalary day (\u0e2d\u0e18\u0e34\u0e01\u0e27\u0e32\u0e23)\n* `leap_month`: for the lunar intercalary month (\u0e2d\u0e18\u0e34\u0e01\u0e21\u0e32\u0e2a)\n* `days_in_year`: returns the number of days in the year. This will be one of:\n * 354: no intercalations (\u0e1b\u0e01\u0e15\u0e34\u0e21\u0e32\u0e2a \u0e1b\u0e01\u0e15\u0e34\u0e27\u0e32\u0e23)\n * 355: intercalary month, no intercalary day (\u0e1b\u0e01\u0e15\u0e34\u0e21\u0e32\u0e2a \u0e2d\u0e18\u0e34\u0e01\u0e27\u0e32\u0e23)\n * 384: no intercalary month, intercalary day (\u0e2d\u0e18\u0e34\u0e01\u0e21\u0e32\u0e2a \u0e1b\u0e01\u0e15\u0e34\u0e27\u0e32\u0e23)\n\nIn the Thai lunisolar calendar system a year can only have either zero or one intercalations. There can't be both an intercalary day (\u0e2d\u0e18\u0e34\u0e01\u0e27\u0e32\u0e23) and month (\u0e2d\u0e18\u0e34\u0e01\u0e21\u0e32\u0e2a) in the same year.\n```\n>>> cs.solar_leap_year\nFalse\n>>> cs.leap_day\nFalse\n>>> cs.leap_month\nTrue\n>>> cs.days_in_year\n384\n```\n\n## `PakDate`: Pakkhakhananaa Date\n\nCreate a `PakDate` object from a pakcode. The `1-` prefix is the cycle number (1-indexed), followed by the \u0e1b\u0e31\u0e01\u0e02\u0e04\u0e13\u0e19\u0e32, \u0e2a\u0e31\u0e21\u0e1e\u0e22\u0e38\u0e2b\u0e30, \u0e1e\u0e22\u0e38\u0e2b\u0e30, \u0e2a\u0e21\u0e38\u0e2b\u0e30, \u0e27\u0e23\u0e23\u0e04 and day of moon phase. The Pakkhakhananaa cycle repeats every 289,577 days.\n```\n>>> from pythaidate import PakDate\n>>> p = PakDate(pakcode=\"1-6:11:5:2:2:10\")\n>>> p.horakhun\n96398\n>>> p.julianday\n2451545\n>>> p.iswanphra\nFalse\n```\nNote that the `horakhun` value from Pakkhakhananaa lunar and (Chulasakarat era) lunisolar calendars are not compatible as they represent day count since the epoch of each calendar. For comparisons use `julianday` instead. `iswanphra` has an alias `issabbath`.\n\nThe Pakkhakhananaa code and abbreviations are available:\n```\n>>> p.pakcode\n'1-6:11:5:2:2:10'\n>>> print(p.pakabbr)\n\u0e56\u0e51\u0e55\u0e02\u0e52\n \u0e51\n```\n\nPakkhakhananaa can be created from a `datetime.date` object:\n```\n>>> from datetime import date\n>>> from pythaidate import PakDate\n>>> p = PakDate(date=date(2000, 1, 1))\n>>> p.julianday\n2451545\n```\n...and from Julian Day Number:\n```\n>>> from pythaidate import PakDate\n>>> p = PakDate(jd=2451545)\n>>> p.julianday\n2451545\n>>> p.pakcode\n'1-6:11:5:2:2:10'\n```\n`pakboard()` will display an ASCII Pakkhakhananaa board (\u0e01\u0e23\u0e30\u0e14\u0e32\u0e19\u0e1b\u0e31\u0e01\u0e02\u0e04\u0e13\u0e19\u0e32) and (best viewed with a fixed-width font):\n```\n>>> p.pakboard()\n \u0e51 \u0e52 \u0e53 \u0e54 \u0e55 \u0e56 \u0e57 \u0e58 \u0e59 \u0e51\u0e50 \u0e51\u0e51 \u0e51\u0e52 \u0e51\u0e53 \u0e51\u0e54 \u0e51\u0e55 \u0e51\u0e56 \u0e51\u0e57 \u0e51\u0e58\n\u0e1b\u0e31\u0e01\u0e02\u0e04\u0e13\u0e19\u0e32 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e08\n\u0e21\u0e2b\u0e32\u0e2a\u0e31\u0e21\u0e1e\u0e22\u0e38\u0e2b\u0e30 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e21\n\u0e08\u0e38\u0e25\u0e2a\u0e31\u0e21\u0e1e\u0e22\u0e38\u0e2b\u0e30 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e08 \u0e21\n\u0e21\u0e2b\u0e32\u0e1e\u0e22\u0e38\u0e2b\u0e30 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e08\n\u0e08\u0e38\u0e25\u0e1e\u0e22\u0e38\u0e2b\u0e30 \u0e21 \u0e21 \u0e21 \u0e21 \u0e21 \u0e08\n\u0e21\u0e2b\u0e32\u0e2a\u0e21\u0e38\u0e2b\u0e30 \u0e08 \u0e08 \u0e08 \u0e21\n\u0e08\u0e38\u0e25\u0e2a\u0e21\u0e38\u0e2b\u0e30 \u0e08 \u0e08 \u0e21\n\u0e21\u0e2b\u0e32\u0e27\u0e23\u0e23\u0e04 \u0e21 \u0e21 \u0e21 \u0e21 \u0e08\n\u0e08\u0e38\u0e25\u0e27\u0e23\u0e23\u0e04 \u0e21 \u0e21 \u0e21 \u0e08\n\u0e21\u0e2b\u0e32\u0e1b\u0e31\u0e01\u0e02\u0e4c \u0e51 \u0e52 \u0e53 \u0e54 \u0e55 \u0e56 \u0e57 \u0e58 \u0e59 \u0e51\u0e50 \u0e51\u0e51 \u0e51\u0e52 \u0e51\u0e53 \u0e51\u0e54 \u0e51\u0e55\n\u0e08\u0e38\u0e25\u0e1b\u0e31\u0e01\u0e02\u0e4c \u0e51 \u0e52 \u0e53 \u0e54 \u0e55 \u0e56 \u0e57 \u0e58 \u0e59 \u0e51\u0e50 \u0e51\u0e51 \u0e51\u0e52 \u0e51\u0e53 \u0e51\u0e54\n \u0e23\u0e2d\u0e1a\u0e17\u0e35\u0e48 \u0e51 \u0e2b\u0e23\u0e04\u0e38\u0e13\u0e1b\u0e31\u0e01\u0e02\u0e04\u0e13\u0e19\u0e32 \u0e59\u0e56\u0e53\u0e59\u0e58 \u0e1b\u0e31\u0e01\u0e02\u0e40\u0e01\u0e13\u0e11\u0e4c \u0e56\u0e55\u0e52\u0e59\n```\n\n## Julian Day Number (JDN) helpers\n\n* `to_julianday(year, month, day)`: Returns JDN from a year, month, day triple\n* `from_julianday(jd)`: Returns a year, month, day triple from a JDN\n* `today()`: returns JDN for today\n* `date_to_julianday(d)`: converts `datetime.date` object or other object with a `julianday` property to JDN\n* `julianday_to_date(jd)`: converts JDN to a `datetime.date` object\n\n## `pythaidate.date`: A `datetime.date` subclass\n\n`pythaidate.date` is a simple subclass of `datetime.date` with an added `.julianday` property:\n\n```\n>>> from pythaidate import date\n>>> d = date(2000, 1, 1)\n>>> d.julianday\n2451545\n```\n\n# Limitations\n\n## General\n\n* Tested and supported on Python 3.8 - 3.12.\n\n## Chulasakarat Era Lunisolar Calendar\n\n* The determination of which years are intercalary has been a somewhat subjective process and changed over the centuries, along with regional variations too. This library produces 7 intercalary months per 19 year period and 11 intercalary days per 57 years. This maintains the overall \"pace\" of the calendar but there may be slight short-term deviations from other calendars. But don't worry, those other calendars are just as wrong too - there's no definitive reference calendar.\n* Currently only supports Sukothai-style month numbering (eg. first month of the year is month 5)\n* `strftime` and `strptime` are not implemented\n\n# Selected References\n\n## Thai\n\n* \u0e2b\u0e25\u0e27\u0e07\u0e27\u0e34\u0e28\u0e32\u0e25\u0e14\u0e23\u0e38\u0e13\u0e01\u0e23 (\u0e2d\u0e31\u0e49\u0e19 \u0e2a\u0e32\u0e23\u0e34\u0e01\u0e1a\u0e38\u0e15\u0e23) (1997) \u0e04\u0e31\u0e21\u0e20\u0e35\u0e23\u0e4c\u0e42\u0e2b\u0e23\u0e32\u0e28\u0e32\u0e2a\u0e15\u0e23\u0e4c\u0e44\u0e17\u0e22 \u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19 \u0e09\u0e1a\u0e31\u0e1a\u0e2a\u0e21\u0e1a\u0e39\u0e23\u0e13\u0e4c.\u00a0Thailand:\u00a0\u0e28\u0e23\u0e35\u0e1b\u0e31\u0e0d\u0e0d\u0e32, \u0e2a\u0e19\u0e1e.\n\n* [\u0e04\u0e27\u0e32\u0e21\u0e23\u0e39\u0e49\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e1b\u0e31\u0e01\u0e02\u0e04\u0e13\u0e19\u0e32 \u0e15\u0e4d\u0e32\u0e23\u0e32\u0e01\u0e32\u0e23\u0e04\u0e4d\u0e32\u0e19\u0e27\u0e13\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e17\u0e32\u0e07\u0e08\u0e31\u0e19\u0e17\u0e23\u0e04\u0e15\u0e34](https://archive.org/details/unset0000unse_d6m6).\u00a0(1999).\u00a0Thailand:\u00a0\u0e21\u0e39\u0e25\u0e19\u0e34\u0e18\u0e34\u0e21\u0e2b\u0e32\u0e21\u0e01\u0e38\u0e0f\u0e23\u0e32\u0e0a\u0e27\u0e34\u0e17\u0e22\u0e32\u0e25\u0e31\u0e22\u0e2f.\n\n## English\n\n* Eade,\u00a0J.C.\u00a0(2018).\u00a0The Calendrical Systems of Mainland South-East Asia.\u00a0Netherlands:\u00a0Brill.\n* Gisl\u00e9n L., Eade, J.C. (2019). The Calendars of Southeast Asia 2: Burma, Thailand, Laos and Cambodia. Journal of Astronomical History and Heritage, 22(3).\n\n## French\n\n* Faraut,\u00a0F.\u00a0G.\u00a0(1910).\u00a0[Astronomie cambodgienne](https://archive.org/details/farraut0astonomiecambodgienne).\u00a0Vietnam:\u00a0Imprimerie F.-H. Schneider.\n\n* Billard, R. L'Astronomie Indienne. Investigation des Textes Sanskrits et des Donnees Numeriques. Paris: Ecole francaise d'extreme-orient. (1971).\n\n# Other Resources\n\n* [NASA's Julian Day Number Calculator](https://core2.gsfc.nasa.gov/time/julian.html)\n* [\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e1b\u0e31\u0e01\u0e02\u0e04\u0e13\u0e19\u0e32.com](https://xn--12ccg5bxauoekd6vraqb.com/)\n\n# Contributors\n\n* Mark Hollow <dev {at} hmmbug.com> (Project Owner)\n",
"bugtrack_url": null,
"license": "",
"summary": "Date classes for Thai calendar systems.",
"version": "0.2.0",
"project_urls": {
"Bug Reports": "https://github.com/hmmbug/pythaidate/issues",
"Homepage": "https://github.com/hmmbug/pythaidate",
"Source": "https://github.com/hmmbug/pythaidate/"
},
"split_keywords": [
"date",
"calendar",
"thai",
"development",
"library"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cc3738f034e9bc34acc96169cc52d87027d80a3f7fe601d278f31b0069203a85",
"md5": "861ce62de6f2031c825f362a45d96b4a",
"sha256": "49ded64733a14db17ae71d3b53ac17b56117c665dae232b9ac245d70a5540fe4"
},
"downloads": -1,
"filename": "pythaidate-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "861ce62de6f2031c825f362a45d96b4a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8, <4",
"size": 18930,
"upload_time": "2023-12-08T22:40:33",
"upload_time_iso_8601": "2023-12-08T22:40:33.741852Z",
"url": "https://files.pythonhosted.org/packages/cc/37/38f034e9bc34acc96169cc52d87027d80a3f7fe601d278f31b0069203a85/pythaidate-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d85b7b72b88b0ad9db26117206b0a4a8a695ec5e696c45d90f3cf75e4dfc54ac",
"md5": "75eb61b040a455f37ec708b2bc1041ec",
"sha256": "717162d59de37b4edae6cb31d89e82dd32e9c3aadb2700b7156f8f8ba78aa146"
},
"downloads": -1,
"filename": "pythaidate-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "75eb61b040a455f37ec708b2bc1041ec",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8, <4",
"size": 815668,
"upload_time": "2023-12-08T22:40:35",
"upload_time_iso_8601": "2023-12-08T22:40:35.530048Z",
"url": "https://files.pythonhosted.org/packages/d8/5b/7b72b88b0ad9db26117206b0a4a8a695ec5e696c45d90f3cf75e4dfc54ac/pythaidate-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-08 22:40:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hmmbug",
"github_project": "pythaidate",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [],
"lcname": "pythaidate"
}