Files
Astronome/backend/src/astronomy/time.rs
T
2026-04-10 00:09:42 +02:00

21 lines
706 B
Rust

use chrono::{DateTime, Utc};
/// Compute Julian Date from a UTC datetime.
pub fn julian_date(dt: DateTime<Utc>) -> f64 {
let unix_seconds = dt.timestamp() as f64;
// J2000.0 epoch is 2000-01-01 12:00:00 UTC = Unix 946728000
// JD of Unix epoch 0 = 2440587.5
unix_seconds / 86400.0 + 2440587.5
}
/// Compute Local Sidereal Time in degrees [0, 360).
/// Uses IAU formula via Julian Date and observer longitude.
pub fn local_sidereal_time(jd: f64, lon_deg: f64) -> f64 {
// Days since J2000.0
let d = jd - 2451545.0;
// Greenwich Mean Sidereal Time in degrees
let gmst_deg = 280.46061837 + 360.98564736629 * d;
let lst = (gmst_deg + lon_deg).rem_euclid(360.0);
lst
}