use std::time::UNIX_EPOCH;
use chrono::{DateTime, Utc};
#[derive(Clone, Default)]
pub struct SystemTime;
impl SystemTime {
pub fn now() -> DateTime<Utc> {
Utc::now()
}
pub fn now_ts() -> u64 {
Utc::now().timestamp() as u64
}
pub fn timestamp() -> u128 {
std::time::SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis()
}
pub fn now_ts_millis() -> u64 {
Utc::now().timestamp_millis() as u64
}
pub fn from_timestamp(ts: u64) -> DateTime<Utc> {
DateTime::<Utc>::from_timestamp(ts as i64, 0).unwrap_or(Utc::now())
}
pub fn is_future(seconds: u64) -> bool {
Self::now_ts() < seconds
}
pub async fn sleep(seconds: u64) {
tokio::time::sleep(tokio::time::Duration::from_secs(seconds)).await;
}
pub fn is_expired(from: DateTime<Utc>, ttl_ms: u128) -> bool {
let now_ms = Utc::now().timestamp_millis();
let from_ms = from.timestamp_millis();
(now_ms.saturating_sub(from_ms)) as u128 >= ttl_ms
}
}