Expand description
§Nusantara Calendar Core
This crate provides the foundational types, traits, and utilities for the nusantara-calendar workspace, which implements traditional Indonesian calendar systems with modern Rust ergonomics.
§Julian Day Number (JDN) Pivot
This crate uses the Julian Day Number (JDN) system as the central pivot for all calendar conversions. JDN provides a continuous count of days since noon Universal Time on January 1, 4713 BCE (Julian calendar), making it ideal for converting between different calendar systems.
The JDN system allows us to:
- Convert any date to/from Gregorian calendar
- Implement bidirectional conversions between calendar systems
- Perform date arithmetic with consistent results
- Handle historical dates across different calendar reforms
§Algorithm Source
The Gregorian to JDN conversion algorithm implemented in this crate follows the standard formula from:
Meeus, Jean. Astronomical Algorithms, 2nd Edition. Willmann-Blohm, 1998. Chapter 7: “Julian Day”.
This reference implementation provides accurate conversions for the full range of historical dates supported by the JDN system (approximately 262,000 BCE to 262,000 CE).
§Core Components
§Types
JDN- Julian Day Number type alias (i64)CycleYear- Type for cycle-year fields (u32)SubYearPosition- Type for sub-year positions (u8)
§Traits
CalendarDate- Core interface for calendar implementationsCalendarMetadata- Access to calendar metadata and cultural contextHasAuspiciousness- Auspiciousness calculations for Indonesian calendars
§Error Handling
CalendarError- Comprehensive error types with detailed contextstub!macro for marking unimplemented features
§Cultural Features
Activity- Indonesian cultural activities for auspiciousness evaluationAuspiciousnessLevel- Favorability levels for activities and dates
§Platform Support
This crate supports multiple compilation targets:
- std: Standard library with full functionality
no_std: Embedded systems withallocsupport- WASM: WebAssembly targets for browser usage
§Example Usage
use calendar_core::{gregorian_to_jdn, jdn_to_gregorian, CalendarDate};
// Convert Gregorian to JDN
let jdn = gregorian_to_jdn(2024, 3, 15);
// Convert back to Gregorian
let (year, month, day) = jdn_to_gregorian(jdn);
// Use with CalendarDate trait implementations
// let calendar_date = MyCalendar::from_gregorian(2024, 3, 15)?;§Indonesian Calendar Context
This crate is specifically designed to support the rich diversity of Indonesian calendar systems, including:
- Javanese calendar (Saka and Islamic integration)
- Balinese calendar (Pawukon cycle)
- Hijri/Islamic calendar
- Chinese calendar integration
- Various regional ethnic calendars
Each calendar system can implement the core traits while maintaining cultural authenticity and computational accuracy.
Re-exports§
pub use auspiciousness::Activity;pub use auspiciousness::AuspiciousnessLevel;
Modules§
- auspiciousness
- Auspiciousness system for Indonesian calendars
Macros§
- stub
- Macro for stub implementations
Enums§
- Calendar
Error - Core error types for calendar operations
Traits§
- Calendar
Date - Trait for calendar date implementations
- Calendar
Metadata - Trait for calendar metadata and information
- HasAuspiciousness
- Trait for calendars that have auspiciousness calculations
Functions§
- gregorian_
to_ jdn - Basic Gregorian to Julian Day Number conversion
- jdn_
to_ gregorian - Basic Julian Day Number to Gregorian conversion
Type Aliases§
- Cycle
Year - Type for cycle-year fields (e.g., year in a 60-year cycle)
- JDN
- Julian Day Number type alias
- SubYear
Position - Type for sub-year positions (e.g., month, day, weekday)