Vietnamese lunar calendar conversion (Ho Ngoc Duc algorithm, per calrules) - Enterprise Ready
Project description
Âm Lịch Việt Nam - Vietnamese Lunar Calendar for Python 🇻🇳
Goal: lightweight - simple – accurate – easy to reuse - Enterprise Ready
lunar-vn is designed for:
- Vietnamese calendar apps
- Tết and lunar holiday reminders
- HR, payroll, booking, and event systems
- Bots that need Vietnamese lunar dates
- Cultural, astrology, and Can Chi applications
- Backend services that need a small, typed, no-dependency package
Features
- No Dependencies: Ready for enterprise usage with strict typing support (PEP-561 compliant).
- Support Can Chi: Heavenly Stems and Earthly Branches for year, month, day, hour.
- Vietnamese Holidays: Common solar and lunar holidays included.
- Convert Solar → Lunar: Accepts robust
datetime.dateinputs. - Convert Lunar → Solar: Accurate conversion using the Ho Ngoc Duc algorithm.
- Supported Range: High precision conversion from years 1900 to 2100.
- Leap month support: Handled automatically.
- Timezone support: Default
UTC+7(Vietnam). - Processing Time Benchmark: High-performance conversions utilizing automated caching (
clear_cachesupported).
Installation
pip install lunar-vn
Usage Examples
Basic Conversion
import datetime as dt
from lunar_vn import solar_to_lunar, lunar_to_solar, LunarDate
# Vietnamese Lunar New Year 2026
solar_date = dt.date(2026, 2, 17)
lunar_date = solar_to_lunar(solar_date)
print(lunar_date) # LunarDate(day=1, month=1, year=2026, leap=False)
# Lunar -> Solar
print(lunar_to_solar(LunarDate(1, 1, 2026))) # 2026-02-17
Get today's Vietnamese lunar date
import datetime as dt
from lunar_vn import solar_to_lunar
today = dt.date.today()
lunar = solar_to_lunar(today)
print(f"Solar: {today}")
print(f"Lunar: {lunar.day}/{lunar.month}/{lunar.year}")
print(f"Leap month: {lunar.leap}")
Can Chi and Holidays
from lunar_vn import solar_to_lunar, can_chi, holidays
import datetime as dt
date = dt.date(2024, 2, 10)
lunar = solar_to_lunar(date)
# Get Year Can Chi
print(can_chi.get_year_can_chi(lunar.year)) # Giáp Thìn
# Get Day Can Chi (requires JDN)
from lunar_vn import jd_from_date
jdn = jd_from_date(date.day, date.month, date.year)
print(can_chi.get_day_can_chi(jdn)) # Giáp Thìn
# Check for Holiday
print(holidays.get_holiday(date)) # Tết Nguyên Đán
Vietnamese Holidays
lunar-vn includes common Vietnamese solar and lunar holidays.
Solar holidays include:
- Tết Dương Lịch
- Ngày Lễ Tình Nhân (Valentine)
- Ngày Quốc Tế Phụ Nữ
- Ngày Giải Phóng Miền Nam
- Ngày Quốc Tế Lao Động
- Ngày Quốc Tế Thiếu Nhi
- Ngày Quốc Khánh
- Ngày Phụ Nữ Việt Nam
- Ngày Nhà Giáo Việt Nam
- Ngày Thành Lập Quân Đội Nhân Dân Việt Nam
- Lễ Giáng Sinh
Lunar holidays include:
- Tết Nguyên Đán
- Rằm Tháng Giêng
- Tết Hàn Thực
- Giỗ Tổ Hùng Vương
- Lễ Phật Đản
- Tết Đoan Ngọ
- Lễ Thất Tịch
- Lễ Vu Lan
- Tết Trung Thu
- Tết Hạ Nguyên
- Tết Ông Công Ông Táo
Generic lunar reminders are also returned for non-leap months:
- Mùng 1
- Rằm
Specific lunar holidays still take precedence over these reminders.
Benchmark
To run the benchmark script:
python scripts/benchmark.py
Expected: > 100,000 conversions per second.
Comparison with Chinese Lunar Calendar
See documentation.
Attribution
The Vietnamese lunar calendar algorithm is described by Ho Ngoc Duc on: https://xemamlich.uhm.vn
This library is a Python re-implementation of the published algorithm.
License
MIT License.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lunar_vn-1.2.1.tar.gz.
File metadata
- Download URL: lunar_vn-1.2.1.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9208318d5765ae90f715722248169290389dbac52604f3f1a0dc10891ffc90aa
|
|
| MD5 |
4c8fe11102834bddee9d69182f455cf5
|
|
| BLAKE2b-256 |
767e6f593b97861c872f772dce990aa134951df380845e192a84e2fa977fe196
|
Provenance
The following attestation bundles were made for lunar_vn-1.2.1.tar.gz:
Publisher:
publish.yml on junkeythong/amlichvietnam
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lunar_vn-1.2.1.tar.gz -
Subject digest:
9208318d5765ae90f715722248169290389dbac52604f3f1a0dc10891ffc90aa - Sigstore transparency entry: 1410182068
- Sigstore integration time:
-
Permalink:
junkeythong/amlichvietnam@d38eb897c691a2e636e514ad3145391df02d1787 -
Branch / Tag:
refs/tags/v1.2.1 - Owner: https://github.com/junkeythong
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d38eb897c691a2e636e514ad3145391df02d1787 -
Trigger Event:
release
-
Statement type:
File details
Details for the file lunar_vn-1.2.1-py3-none-any.whl.
File metadata
- Download URL: lunar_vn-1.2.1-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bef774abcaad014f17157d0568b88d7be5a9effd341eec18d53afa5e9572c198
|
|
| MD5 |
1089da24c17f31be484729dcb91d0d32
|
|
| BLAKE2b-256 |
4af7d000057b358a19048cea519681449962f0212b3547cf82aeac18c11162a7
|
Provenance
The following attestation bundles were made for lunar_vn-1.2.1-py3-none-any.whl:
Publisher:
publish.yml on junkeythong/amlichvietnam
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lunar_vn-1.2.1-py3-none-any.whl -
Subject digest:
bef774abcaad014f17157d0568b88d7be5a9effd341eec18d53afa5e9572c198 - Sigstore transparency entry: 1410182093
- Sigstore integration time:
-
Permalink:
junkeythong/amlichvietnam@d38eb897c691a2e636e514ad3145391df02d1787 -
Branch / Tag:
refs/tags/v1.2.1 - Owner: https://github.com/junkeythong
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d38eb897c691a2e636e514ad3145391df02d1787 -
Trigger Event:
release
-
Statement type: