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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use chrono::prelude::*;
pub enum TimeMode {
UTC,
Local
}
pub fn get_time_now(mode : TimeMode) -> f64 {
let (sec, nsec) = match mode {
TimeMode::UTC => {
let time = Utc::now();
(time.timestamp(), time.timestamp_subsec_nanos())
},
TimeMode::Local => {
let time = Local::now();
(time.timestamp(), time.timestamp_subsec_nanos())
}
};
sec as f64 + (nsec as f64 / 1_000_000_000.)
}
pub fn seconds_to_hms(total_secs : i64) -> (isize, isize, isize) {
let hour : isize = (total_secs / (60 * 60)) as isize;
let minute : isize = ((total_secs - (hour as i64) * 60 * 60) / 60) as isize;
let second : isize = (total_secs
- (hour as i64) * 60 * 60
- (minute as i64) * 60) as isize;
(hour, minute, second)
}
pub fn i64_secs_to_date_time_string(secs : i64,
mode : TimeMode) -> Option<String> {
let datetime =
match NaiveDateTime::from_timestamp_opt(secs, 0) {
None => None,
Some(x) => match mode {
TimeMode::UTC => Some((x.year(),
x.month(),
x.day(),
x.hour(),
x.minute(),
x.second())),
TimeMode::Local => {
let x = Local.from_utc_datetime(&x);
Some((x.year(),
x.month(),
x.day(),
x.hour(),
x.minute(),
x.second()))
}
}
};
match datetime {
None => None,
Some((year, month, day, hour, minute, second)) => Some(format!("{}-{:02}-{:02} {:02}:{:02}:{:02}",
year,
month,
day,
hour,
minute,
second)),
}
}