use crate::types::{
data::{
zone::{Sign, Zone}
},
planets::{
earth::{
calendar::{
constants::{
seconds::{SECONDS_IN_MINUTE, SECONDS_IN_HOUR},
},
}
}
}
};
use core_foundation::{
date::{CFAbsoluteTimeGetCurrent},
timezone::{CFTimeZoneGetSecondsFromGMT, CFTimeZoneCopySystem}
};
pub fn local_timezone() -> Zone {
let mut time_zone: Zone = Zone::default();
let seconds: i32 = unsafe { CFTimeZoneGetSecondsFromGMT(CFTimeZoneCopySystem(), CFAbsoluteTimeGetCurrent()) } as i32;
if seconds < 0 {
time_zone.sign = Sign::Signed;
} else {
time_zone.sign = Sign::Unsigned;
}
let tz_seconds: u32 = seconds.unsigned_abs();
(
time_zone.hours,
time_zone.minutes,
time_zone.seconds
) = (
(tz_seconds / (SECONDS_IN_HOUR as u32)) as u8,
((tz_seconds % (SECONDS_IN_HOUR as u32)) / (SECONDS_IN_MINUTE as u32)) as u8,
(tz_seconds % (SECONDS_IN_MINUTE as u32)) as u8
);
return time_zone;
}