use crate::epoch::UnixTimestamp;
use crate::gregorian::Date;
use crate::Time;
pub struct UTCDateTime {
pub(crate) date: Date,
pub(crate) time: Time,
}
impl UTCDateTime {
#[must_use]
pub fn new(date: Date, time: Time) -> UTCDateTime {
UTCDateTime { date, time }
}
#[must_use]
pub fn get_date(&self) -> Date {
self.date
}
#[must_use]
pub fn get_time(&self) -> Time {
self.time
}
#[must_use]
pub fn now() -> UTCDateTime {
UnixTimestamp::now().into()
}
}
impl From<&UnixTimestamp> for UTCDateTime {
fn from(value: &UnixTimestamp) -> Self {
let date = value.as_date();
let remaining_seconds = value.get_offset().as_seconds_f64()
- date.as_unix_timestamp().get_offset().as_seconds_f64();
let time = Time::from_seconds_f64(remaining_seconds).unwrap_or_default();
UTCDateTime { date, time }
}
}
impl From<UnixTimestamp> for UTCDateTime {
fn from(value: UnixTimestamp) -> Self {
let date = value.as_date();
let remaining_seconds = value.get_offset().as_seconds_f64()
- date.as_unix_timestamp().get_offset().as_seconds_f64();
let time = Time::from_seconds_f64(remaining_seconds).unwrap_or_default();
UTCDateTime { date, time }
}
}