exocore_core/time/
mod.rs

1mod atomic_instant;
2mod clock;
3mod consistent_timestamp;
4
5pub use std::time::Duration;
6
7pub use atomic_instant::AtomicInstant;
8pub use chrono::prelude::*;
9pub use clock::Clock;
10pub use consistent_timestamp::ConsistentTimestamp;
11pub use wasm_timer::{Instant, SystemTime, UNIX_EPOCH};
12
13pub fn timestamp_parts_to_datetime(secs: i64, nanos: i32) -> chrono::DateTime<chrono::Utc> {
14    chrono::DateTime::from_timestamp(secs, nanos as u32).unwrap_or_default()
15}
16
17pub fn timestamp_millis_to_datetime(millis: i64) -> chrono::DateTime<chrono::Utc> {
18    let secs = millis / 1000;
19    let nanos = (millis - secs * 1000) * 1_000_000;
20
21    timestamp_parts_to_datetime(secs, nanos as i32)
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27
28    #[test]
29    fn timestamp_parts() {
30        let date = timestamp_parts_to_datetime(1599492441, 123_000_000);
31        assert_eq!("2020-09-07T15:27:21.123+00:00", date.to_rfc3339());
32    }
33
34    #[test]
35    fn timestamp_millis() {
36        let date = timestamp_millis_to_datetime(1599492441123);
37        assert_eq!("2020-09-07T15:27:21.123+00:00", date.to_rfc3339());
38    }
39}