1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use std::convert::From;
use std::time::{SystemTime, UNIX_EPOCH};
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct UnixTime {
pub secs: i64,
pub nanosecs: u32,
}
impl From<SystemTime> for UnixTime {
fn from(t: SystemTime) -> UnixTime {
if let Ok(after) = t.duration_since(UNIX_EPOCH) {
UnixTime {
secs: after.as_secs() as i64,
nanosecs: after.subsec_nanos(),
}
} else {
let before = UNIX_EPOCH.duration_since(t).unwrap();
let mut secs = -(before.as_secs() as i64);
let mut nanosecs = before.subsec_nanos();
if nanosecs > 0 {
secs -= 1;
nanosecs = 1_000_000_000 - nanosecs;
}
UnixTime { secs, nanosecs }
}
}
}