Function python_comm::prelude::bjtc_from_duration[][src]

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

转换 duration 为 timestamp, 精确到毫秒

在同一时刻记录 DateTime 为 anchor, 创建 time::Instant 为 now, 则在之后的任意时刻

bjtc_from_duration 转换 now.duration() 为 timestamp,

bjtc_to_duration 转换 timestamp 为 now.duration()

用法

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

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

thread::sleep(time::Duration::from_millis(700));  // 0.7 秒
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);