mirror of
https://github.com/acamarata/hijri-core-dart.git
synced 2026-06-30 18:54:27 +00:00
1.6 KiB
1.6 KiB
Advanced Usage
Selecting a Calendar Engine
The default engine is Umm al-Qura (UAQ). Switch to FCNA for North American Islamic Society dates:
import 'package:hijri_core/hijri_core.dart';
void main() {
final date = DateTime.utc(2025, 3, 1);
final uaq = toHijri(date, calendar: 'uaq');
final fcna = toHijri(date, calendar: 'fcna');
print('UAQ: ${uaq?.hy}/${uaq?.hm}/${uaq?.hd}');
print('FCNA: ${fcna?.hy}/${fcna?.hm}/${fcna?.hd}');
}
Listing Available Calendars
final calendars = listCalendars();
print(calendars); // ['uaq', 'fcna']
final engine = getCalendar('uaq');
print(engine.name); // 'Umm al-Qura'
Custom Engine
Implement CalendarEngine to plug in your own calendar algorithm:
import 'package:hijri_core/hijri_core.dart';
class MyCalendarEngine implements CalendarEngine {
@override
String get id => 'my-calendar';
@override
String get name => 'My Custom Calendar';
@override
HijriDate? toHijri(DateTime gregorian) {
// Your conversion logic here
return null;
}
@override
DateTime? toGregorian(int hy, int hm, int hd) {
// Your reverse conversion logic here
return null;
}
@override
int daysInMonth(int hy, int hm) => 30; // simplified
@override
bool isValid(int hy, int hm, int hd) => hm >= 1 && hm <= 12 && hd >= 1 && hd <= 30;
}
// Register and use
registerCalendar(MyCalendarEngine());
final result = toHijri(DateTime.utc(2025, 3, 1), calendar: 'my-calendar');
Ramadan Detection
bool isRamadan(DateTime date) {
final hijri = toHijri(date);
return hijri != null && hijri.hm == 9;
}