pub fn bjtc_from_duration(anchor: &DateTime<Utc>, millis: f64) -> i64
Expand description

Convert duration to timestamp, accurate to milliseconds

At the same time, record datetime as anchor, create time::instant as now, then at any time after,

bjtc_from_duration convert now.duration() to timestamp,

bjtc_to_duration convert timestamp to now.duration()

Usage

use chrono::Utc;
use python_comm::use_basic::*;
use std::{thread, time};

let anchor = Utc::now();
let now = time::Instant::now();

thread::sleep(time::Duration::from_millis(700));  // 0.7 seconds
let t1 = bjtc_from_duration(&anchor, now.elapsed().as_secs_f64() * 1000.0);
let t2 = bjtc_to_duration(&anchor, t1).unwrap();
let diff = t2.as_secs_f64() - 0.7;
assert!(diff > -0.5 && diff < 0.5);

let t1 = bjtc_from_duration(&anchor, 1000.0);
let t3 = bjtc_to_duration(&anchor, t1 - 1000);
assert_eq!(t3.is_err(), false);
assert_eq!(t3.unwrap().as_secs_f64(), 0.0);
let t4 = bjtc_to_duration(&anchor, t1 - 1001);
assert_eq!(t4.is_err(), true);

let diff = bjtc_to_duration(&anchor, bj_timestamp_millis())
  .unwrap()
  .as_secs_f64()
  - 0.7;
assert!(diff > -0.5 && diff < 0.5);