如何在Rust中获取持续时间为毫秒数

Kev*_*rke 8 rust

我有一个time::Duration.如何将此持续时间表示的毫秒数作为整数?曾经有一个num_milliseconds()功能,但它不再可用.

小智 8

从 Rust 1.33.0 开始,有一个as_millis()函数:

use std::time::SystemTime;

fn main() {
    let now = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).expect("get millis error");
    println!("now millis: {}", now.as_millis());
}
Run Code Online (Sandbox Code Playgroud)

从 Rust 1.27.0 开始,有一个subsec_millis()函数:

use std::time::SystemTime;

fn main() {
    let since_the_epoch = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).expect("get millis error");
    let seconds = since_the_epoch.as_secs();
    let subsec_millis = since_the_epoch.subsec_millis() as u64;
    println!("now millis: {}", seconds * 1000 + subsec_millis);
}
Run Code Online (Sandbox Code Playgroud)

从 Rust 1.8 开始,有一个subsec_nanos函数:

let in_ms = since_the_epoch.as_secs() * 1000 +
            since_the_epoch.subsec_nanos() as u64 / 1_000_000;
Run Code Online (Sandbox Code Playgroud)

也可以看看:


Kev*_*rke 4

这是我想出的解决方案,即将秒乘以十亿,加上纳秒,然后除以 1e6。

let nanos = timeout_duration.subsec_nanos() as u64;
let ms = (1000*1000*1000 * timeout_duration.as_secs() + nanos)/(1000 * 1000);
Run Code Online (Sandbox Code Playgroud)

  • 我宁愿将秒乘以 1000,然后添加“nanos/1000000”。溢出风险较小。 (7认同)
  • @w.brian 文档中的示例 https://doc.rust-lang.org/std/time/struct.Duration.html#method.subsec_nanos 支持以下事实:该方法返回以纳秒为单位的持续时间的小数部分,所以答案对我来说似乎是正确的。 (2认同)