An astrolomical Hindu solar calendar
Vasanta-Madhu-S01, 5127, ☆26
Happy New Year everyone 🙌 Today is Yugadi, the beginning of Caitra-ṡukla 1, which is when the spring season (vasanta ṛtu) is in the air. This year is called Parābhava. Year reckoning is 5127 (elapsed Kali years), 1948 (Ṡālivāhana-ṡaka) or 2083 (Vikrama samvat). Traditionally, we prepare Ugadi Pachadi or at least Bevu bella - it’s a constant reminder that life is a combination of bitter and sweet. The New Year day is according to the Hindu lunar (lunisolar) calendar. For the Hindi heartland, the month of Chaitra began a fortnight ago but for the rest of us, Chaitra begins with the New Year day.
For this post thought, I would like to talk about the Hindu solar calendar. If you’ve read my previous posts, you know that I support tropical (sāyana) calendars instead of sidereal (nirayana) calendars for civil use. Solar calendars are especially easy to understand and implement. A tropical solar calendar tracks the seasons accurately. The Gregorian calendar is also a solar calendar that needs leap years so that seasons are in sync. However, we can design a calendar that is based on observations of the astronomical position of the Sun. Such a calendar doesn’t require leap years and automatically stays aligned with the seasons. The downside is that the length of the months are variable - between 29 to 32 days - which changes every year!
I took the help of Google Gemini AI and wrote up this piece of Python code. It follows the so-called “Odia rule” for determining the beginning of the month - simply choose the same Gregorian date on which solar transit to a new zodiac sign occurs. The code uses Skyfield library, instead of the well-known Swiss Ephemeris. It is intentionally anchored to UTC because then we don’t have to depend on local sunrise times (which may not even occur near polar regions).
Example usage:
>>> gregorian_to_sayana_utc_midnight(2026, 3, 19, 6, 0, 0)
Gregorian Target (UTC): 2026-03-19 06:00:00 UTC
Previous Sankranti (UTC): 2026-02-18 15:51:56 UTC
Sayana Month: Meena
Sayana Day: 30
Degrees: 358.6424
>>> sayana_to_gregorian_utc(2026, "Mesha", 15)
Sayana Input: Mesha 15
Sankranti (UTC): 2026-03-20 14:45:57 UTC
Gregorian Date (UTC): 2026-04-03