1use std::time::{Duration, SystemTime, UNIX_EPOCH};
2
3static _TIME_TTO_MICROSECONDS_OFFSET: u64 = 11644473600_u64 * 1000 * 1000;
4
5pub const MIN_BUCKY_TIME: u64 = 11644473600_u64 * 1000 * 1000;
6
7pub fn system_time_to_bucky_time(time: &SystemTime) -> u64 {
8 time.duration_since(UNIX_EPOCH).unwrap().as_micros() as u64 + _TIME_TTO_MICROSECONDS_OFFSET
9}
10
11pub fn bucky_time_to_system_time(time: u64) -> SystemTime {
12 UNIX_EPOCH + Duration::from_micros(bucky_time_to_unix_time(time))
13}
14
15pub fn bucky_time_to_unix_time(time: u64) -> u64 {
17 if time <= _TIME_TTO_MICROSECONDS_OFFSET {
18 return 0;
19 }
20
21 time - _TIME_TTO_MICROSECONDS_OFFSET
22}
23
24pub fn unix_time_to_bucky_time(time: u64) -> u64 {
26 time + _TIME_TTO_MICROSECONDS_OFFSET
27}
28
29pub fn bucky_time_now() -> u64 {
30 system_time_to_bucky_time(&SystemTime::now())
31}
32
33pub fn js_time_to_bucky_time(time: u64) -> u64 {
35 time * 1000 + _TIME_TTO_MICROSECONDS_OFFSET
36}
37
38pub fn bucky_time_to_js_time(time: u64) -> u64 {
39 if time <= _TIME_TTO_MICROSECONDS_OFFSET {
40 return 0;
41 }
42 ((time - _TIME_TTO_MICROSECONDS_OFFSET) as f64 / 1000f64) as u64
43}
44
45#[test]
46fn test() {
47 let bucky_time = 13248879111201108u64;
48 let js_time = bucky_time_to_js_time(bucky_time);
49 let bucky_time2 = js_time_to_bucky_time(js_time);
50
51 println!("{} -> {} -> {}", bucky_time, js_time, bucky_time2);
52 bucky_time_to_js_time(0);
53 js_time_to_bucky_time(0);
54}