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}