#[cfg(feature = "local-time")] mod localtime { use std::time::SystemTime; /// Return a string representing the current date and time as localtime. /// /// Available with the `localtime` feature toggle. pub fn format_now_datetime_seconds() -> String { let t = time::OffsetDateTime::now_utc(); t.to_offset(time::UtcOffset::local_offset_at(t).unwrap_or(time::UtcOffset::UTC)) .format(&time::format_description::parse("%F %T").expect("format known to work")) .expect("formatting always works") } /// Return a string representing the current time as localtime. /// /// Available with the `localtime` feature toggle. pub fn format_time_for_messages(time: SystemTime) -> String { time::OffsetDateTime::from(time) .to_offset(time::UtcOffset::current_local_offset().unwrap_or(time::UtcOffset::UTC)) .format(&time::format_description::parse("[hour]:[minute]:[second]").expect("format known to work")) .expect("formatting always works") } } /// An `hours:minute:seconds` format. pub const DATE_TIME_HMS: usize = "00:51:45".len(); #[cfg(not(feature = "local-time"))] mod utc { use std::time::SystemTime; use super::DATE_TIME_HMS; const DATE_TIME_YMD: usize = "2020-02-13T".len(); /// Return a string representing the current date and time as UTC. /// /// Available without the `localtime` feature toggle. pub fn format_time_for_messages(time: SystemTime) -> String { String::from_utf8_lossy( &humantime::format_rfc3339_seconds(time).to_string().as_bytes() [DATE_TIME_YMD..DATE_TIME_YMD + DATE_TIME_HMS], ) .into_owned() } /// Return a string representing the current time as UTC. /// /// Available without the `localtime` feature toggle. pub fn format_now_datetime_seconds() -> String { String::from_utf8_lossy( &humantime::format_rfc3339_seconds(std::time::SystemTime::now()) .to_string() .as_bytes()[.."2020-02-13T00:51:45".len()], ) .into_owned() } } #[cfg(feature = "local-time")] pub use localtime::*; #[cfg(not(feature = "local-time"))] pub use utc::*;