high_latitude/
high-latitude.rs1use chrono::{DateTime, NaiveDate, Utc};
2use mawaqit::prelude::*;
3
4fn times_at(lat: f64, label: &str, date: NaiveDate, original_coords: Coordinates) {
5 let params = Configuration::new(18.0, 17.0)
6 .method(Method::MuslimWorldLeague)
7 .madhab(Madhab::Shafi)
8 .done();
9
10 let ref_coords = Coordinates::new(lat, original_coords.longitude);
11 match PrayerTimes::try_new(date, ref_coords, params) {
12 Ok(t) => println!(
13 "{label:>12} ({lat:.2}°): {:?} {:?} {:?} {:?} {:?} {:?}",
14 t.time(Prayer::Fajr),
15 t.time(Prayer::Sunrise),
16 t.time(Prayer::Dhuhr),
17 t.time(Prayer::Asr),
18 t.time(Prayer::Maghrib),
19 t.time(Prayer::Isha),
20 ),
21 Err(e) => println!("{label:>12} ({lat:.2}°): FAIL ({e})"),
22 }
23}
24
25fn main() {
26 let date = NaiveDate::from_ymd_opt(2026, 7, 5).expect("valid date");
27 let dt: DateTime<Utc> = date.and_hms_opt(0, 0, 0).unwrap().and_utc();
28 let tromso = Coordinates::new(70.0, 20.0);
29
30 times_at(70.0, "Original 70°", date, tromso);
32
33 let resolved = PolarFallback::NearestLatitude
35 .resolve_latitude(dt, tromso, Madhab::Shafi)
36 .unwrap();
37 times_at(resolved, "NearestLat", date, tromso);
38 println!(" → Resolved latitude: {resolved:.6}°");
39
40 times_at(45.0, "Reference45", date, tromso);
42
43 times_at(48.0, "48° fixed", date, tromso);
45
46 let params = Configuration::new(18.0, 17.0)
48 .method(Method::MuslimWorldLeague)
49 .madhab(Madhab::Shafi)
50 .polar_fallback(PolarFallback::NearestLatitude)
51 .done();
52 let t = PrayerTimes::try_new(date, tromso, params).unwrap();
53 println!("\nNearestLatitude via API:");
54 println!(
55 " {:?} {:?} {:?} {:?} {:?} {:?}",
56 t.time(Prayer::Fajr),
57 t.time(Prayer::Sunrise),
58 t.time(Prayer::Dhuhr),
59 t.time(Prayer::Asr),
60 t.time(Prayer::Maghrib),
61 t.time(Prayer::Isha),
62 );
63
64 let winter = NaiveDate::from_ymd_opt(2026, 1, 15).expect("valid date");
66 let wt: DateTime<Utc> = winter.and_hms_opt(0, 0, 0).unwrap().and_utc();
67 println!("\n--- Winter (Jan 15) ---");
68 times_at(70.0, "Original 70°", winter, tromso);
69
70 let winter_resolved = PolarFallback::NearestLatitude
71 .resolve_latitude(wt, tromso, Madhab::Shafi)
72 .unwrap();
73 times_at(winter_resolved, "NearestLat", winter, tromso);
74 println!(" → Resolved latitude: {winter_resolved:.6}°");
75 times_at(45.0, "Reference45", winter, tromso);
76
77 let t2 = PrayerTimes::try_new(winter, tromso, params).unwrap();
78 println!("\nWinter NearestLatitude via API:");
79 println!(
80 " {:?} {:?} {:?} {:?} {:?} {:?}",
81 t2.time(Prayer::Fajr),
82 t2.time(Prayer::Sunrise),
83 t2.time(Prayer::Dhuhr),
84 t2.time(Prayer::Asr),
85 t2.time(Prayer::Maghrib),
86 t2.time(Prayer::Isha),
87 );
88}