ferrijs_std/utils/
time.rs1use std::{
2 sync::atomic::{AtomicU64, Ordering},
3 time::SystemTime,
4};
5
6static TIME_ORIGIN: AtomicU64 = AtomicU64::new(0);
7
8pub fn now_nanos() -> u64 {
14 SystemTime::now()
15 .duration_since(std::time::UNIX_EPOCH)
16 .unwrap_or_default()
17 .as_nanos() as u64
18}
19
20pub fn now_millis() -> i64 {
26 SystemTime::now()
27 .duration_since(std::time::UNIX_EPOCH)
28 .unwrap_or_default()
29 .as_millis() as i64
30}
31
32pub fn origin_nanos() -> u64 {
38 TIME_ORIGIN.load(Ordering::Relaxed)
39}
40
41pub fn init() {
43 if TIME_ORIGIN.load(Ordering::Relaxed) == 0 {
44 let time_origin = now_nanos();
45 TIME_ORIGIN.store(time_origin, Ordering::Relaxed)
46 }
47}