cyfs_base/base/
time.rs

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
15// 转换为UNIX_EPOCH开始的微秒数
16pub 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
24// in micro seconds of unix epoch
25pub 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
33// js time以毫秒为单位
34pub 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}