You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中将std::time::Duration格式化为字符串?

如何在Rust中格式化std::time::Duration为字符串

生成[SECONDS, NANOSECONDS]格式的字符串

std::time::Duration本身提供了直接获取秒数和纳秒部分的方法,结合format!宏就能轻松生成目标格式:

use std::time::Duration;

fn main() {
    // 创建一个Duration实例:123秒 + 456789012纳秒
    let duration = Duration::new(123, 456_789_012);
    // 拼接成目标格式字符串
    let formatted = format!("[{}, {}]", duration.as_secs(), duration.subsec_nanos());
    println!("{}", formatted); // 输出: [123, 456789012]
}

其中:

  • as_secs()返回Duration包含的总秒数(类型为u64)
  • subsec_nanos()返回不足1秒的纳秒部分(类型为u32,范围0~999_999_999)

其他常见格式化方式

带小数秒的格式(如"123.456789012s")

可以将纳秒部分转换为秒的小数位,或者直接补零拼接:

use std::time::Duration;

fn format_with_decimal(dur: Duration) -> String {
    let secs = dur.as_secs();
    let nanos = dur.subsec_nanos();
    // 补零确保纳秒部分是9位
    format!("{}.{:09}s", secs, nanos)
}

fn main() {
    let duration = Duration::new(123, 456_789_012);
    println!("{}", format_with_decimal(duration)); // 输出: 123.456789012s
}

人类可读格式(天/时/分/秒/纳秒)

通过手动计算各时间单位的数值,生成更易读的字符串:

use std::time::Duration;

fn format_human_readable(dur: Duration) -> String {
    let total_secs = dur.as_secs();
    let days = total_secs / 86400;
    let hours = (total_secs % 86400) / 3600;
    let minutes = (total_secs % 3600) / 60;
    let seconds = total_secs % 60;
    let nanos = dur.subsec_nanos();

    format!("{}d {}h {}m {}s {}ns", days, hours, minutes, seconds, nanos)
}

fn main() {
    let duration = Duration::new(123456, 789012345);
    println!("{}", format_human_readable(duration)); // 输出: 1d 10h 17m 36s 789012345ns
}

如果需要更复杂的格式化逻辑,也可以使用humantime这类第三方库来简化开发(无需额外依赖时,手动计算的方式足够覆盖大部分场景)。

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:49:56