pub struct Duration { /* fields omitted */ }
Expand description
Duration
类型代表时间跨度,通常用于系统超时。
每个 Duration
由整数秒和以纳秒表示的小数部分组成。
如果基础系统不支持纳秒级精度,则绑定系统超时的 API 通常会将纳秒数舍入。
Duration
实现了许多常见的 traits,包括 Add
,Sub
和其他 ops
traits。它通过返回零长度 Duration
来实现 Default
。
use std::time::Duration;
let five_seconds = Duration::new(5, 0);
let five_seconds_and_five_nanos = five_seconds + Duration::new(0, 5);
assert_eq!(five_seconds_and_five_nanos.as_secs(), 5);
assert_eq!(five_seconds_and_five_nanos.subsec_nanos(), 5);
let ten_millis = Duration::from_millis(10);
Run
Duration
特意没有 Display
隐含功能,因为有多种方法可以格式化时间范围以提高可读性。
Duration
提供一个 Debug
impl 来显示值的完整精度。
Debug
输出使用非 ASCII “µs” 后缀微秒。
如果您的程序输出可能出现在不依赖于完全 Unicode 兼容性的上下文中,则您可能希望自己格式化 Duration
对象或使用 crate 这样做。
🔬 This is a nightly-only experimental API. (
duration_constants
#57391)
持续时间为一秒。
#![feature(duration_constants)]
use std::time::Duration;
assert_eq!(Duration::SECOND, Duration::from_secs(1));
Run
🔬 This is a nightly-only experimental API. (
duration_constants
#57391)
一毫秒的持续时间。
#![feature(duration_constants)]
use std::time::Duration;
assert_eq!(Duration::MILLISECOND, Duration::from_millis(1));
Run
🔬 This is a nightly-only experimental API. (
duration_constants
#57391)
一微秒的持续时间。
#![feature(duration_constants)]
use std::time::Duration;
assert_eq!(Duration::MICROSECOND, Duration::from_micros(1));
Run
🔬 This is a nightly-only experimental API. (
duration_constants
#57391)
1 纳秒的持续时间。
#![feature(duration_constants)]
use std::time::Duration;
assert_eq!(Duration::NANOSECOND, Duration::from_nanos(1));
Run
持续时间为零。
use std::time::Duration;
let duration = Duration::ZERO;
assert!(duration.is_zero());
assert_eq!(duration.as_nanos(), 0);
Run
最大持续时间。
根据平台的需要可能有所不同。
必须能够包含两个 Instant
实例或两个 SystemTime
实例之间的差异。
该约束使其在实践中的值约为 584,942,417,355 年,目前在所有平台上都使用。
use std::time::Duration;
assert_eq!(Duration::MAX, Duration::new(u64::MAX, 1_000_000_000 - 1));
Run
根据指定的整数秒数和其他纳秒数创建一个新的 Duration
。
如果纳秒数大于 10 亿 (十亿分之一秒),则它将延续到提供的秒数中。
如果纳秒的进位溢出秒计数器,则此构造方法将为 panic。
use std::time::Duration;
let five_seconds = Duration::new(5, 0);
Run
1.3.0 (const: 1.32.0)[src]
根据指定的整数秒创建一个新的 Duration
。
use std::time::Duration;
let duration = Duration::from_secs(5);
assert_eq!(5, duration.as_secs());
assert_eq!(0, duration.subsec_nanos());
Run
1.3.0 (const: 1.32.0)[src]
从指定的毫秒数创建一个新的 Duration
。
use std::time::Duration;
let duration = Duration::from_millis(2569);
assert_eq!(2, duration.as_secs());
assert_eq!(569_000_000, duration.subsec_nanos());
Run
1.27.0 (const: 1.32.0)[src]
从指定的微秒数创建一个新的 Duration
。
use std::time::Duration;
let duration = Duration::from_micros(1_000_002);
assert_eq!(1, duration.as_secs());
assert_eq!(2000, duration.subsec_nanos());
Run
1.27.0 (const: 1.32.0)[src]
从指定的纳秒数创建一个新的 Duration
。
use std::time::Duration;
let duration = Duration::from_nanos(1_000_000_123);
assert_eq!(1, duration.as_secs());
assert_eq!(123, duration.subsec_nanos());
Run
1.53.0 (const: 1.53.0)[src]
如果此 Duration
不跨越时间,则返回 true。
use std::time::Duration;
assert!(Duration::ZERO.is_zero());
assert!(Duration::new(0, 0).is_zero());
assert!(Duration::from_nanos(0).is_zero());
assert!(Duration::from_secs(0).is_zero());
assert!(!Duration::new(1, 1).is_zero());
assert!(!Duration::from_nanos(1).is_zero());
assert!(!Duration::from_secs(1).is_zero());
Run
1.3.0 (const: 1.32.0)[src]
返回此 Duration
包含的 whole 秒数。
返回的值不包括持续时间的小数 (nanosecond) 部分,可以使用 subsec_nanos
获得。
use std::time::Duration;
let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_secs(), 5);
Run
要确定 Duration
代表的总秒数,请结合使用 as_secs
和 subsec_nanos
:
use std::time::Duration;
let duration = Duration::new(5, 730023852);
assert_eq!(5.730023852,
duration.as_secs() as f64
+ duration.subsec_nanos() as f64 * 1e-9);
Run
1.27.0 (const: 1.32.0)[src]
以毫秒为单位返回此 Duration
的小数部分。
当以毫秒表示时,这个方法不会返回持续时间的长度。
返回的数字始终代表秒的小数部分 (即,小于一千)。
use std::time::Duration;
let duration = Duration::from_millis(5432);
assert_eq!(duration.as_secs(), 5);
assert_eq!(duration.subsec_millis(), 432);
Run
1.27.0 (const: 1.32.0)[src]
以整个微秒为单位返回此 Duration
的小数部分。
当以微秒表示时,这个方法不会返回持续时间的长度。
返回的数字始终代表秒的小数部分 (即,小于一百万)。
use std::time::Duration;
let duration = Duration::from_micros(1_234_567);
assert_eq!(duration.as_secs(), 1);
assert_eq!(duration.subsec_micros(), 234_567);
Run
1.3.0 (const: 1.32.0)[src]
返回此 Duration
的小数部分,以纳秒为单位。
当以纳秒表示时,这个方法不会返回持续时间的长度。
返回的数字始终代表秒的小数部分 (即,小于十亿)。
use std::time::Duration;
let duration = Duration::from_millis(5010);
assert_eq!(duration.as_secs(), 5);
assert_eq!(duration.subsec_nanos(), 10_000_000);
Run
1.33.0 (const: 1.33.0)[src]
返回此 Duration
包含的总毫秒数。
use std::time::Duration;
let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_millis(), 5730);
Run
1.33.0 (const: 1.33.0)[src]
返回此 Duration
包含的总微秒数。
use std::time::Duration;
let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_micros(), 5730023);
Run
1.33.0 (const: 1.33.0)[src]
返回此 Duration
包含的纳秒总数。
use std::time::Duration;
let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_nanos(), 5730023852);
Run
检查 Duration
的添加。
计算 self + other
,如果发生溢出则返回 None
。
基本用法:
use std::time::Duration;
assert_eq!(Duration::new(0, 0).checked_add(Duration::new(0, 1)), Some(Duration::new(0, 1)));
assert_eq!(Duration::new(1, 0).checked_add(Duration::new(u64::MAX, 0)), None);
Run
Duration
饱和添加。
计算 self + other
,如果发生溢出则返回 Duration::MAX
。
#![feature(duration_constants)]
use std::time::Duration;
assert_eq!(Duration::new(0, 0).saturating_add(Duration::new(0, 1)), Duration::new(0, 1));
assert_eq!(Duration::new(1, 0).saturating_add(Duration::new(u64::MAX, 0)), Duration::MAX);
Run
检查 Duration
减法。
计算 self - other
,如果结果为负或发生溢出,则返回 None
。
基本用法:
use std::time::Duration;
assert_eq!(Duration::new(0, 1).checked_sub(Duration::new(0, 0)), Some(Duration::new(0, 1)));
assert_eq!(Duration::new(0, 0).checked_sub(Duration::new(0, 1)), None);
Run
Duration
减法饱和。
计算 self - other
,如果结果为负或发生溢出,则返回 Duration::ZERO
。
use std::time::Duration;
assert_eq!(Duration::new(0, 1).saturating_sub(Duration::new(0, 0)), Duration::new(0, 1));
assert_eq!(Duration::new(0, 0).saturating_sub(Duration::new(0, 1)), Duration::ZERO);
Run
检查 Duration
乘法。
计算 self * other
,如果发生溢出则返回 None
。
基本用法:
use std::time::Duration;
assert_eq!(Duration::new(0, 500_000_001).checked_mul(2), Some(Duration::new(1, 2)));
assert_eq!(Duration::new(u64::MAX - 1, 0).checked_mul(2), None);
Run
饱和 Duration
乘法。
计算 self * other
,如果发生溢出则返回 Duration::MAX
。
#![feature(duration_constants)]
use std::time::Duration;
assert_eq!(Duration::new(0, 500_000_001).saturating_mul(2), Duration::new(1, 2));
assert_eq!(Duration::new(u64::MAX - 1, 0).saturating_mul(2), Duration::MAX);
Run
检查 Duration
分区。
计算 self / other
,如果为 other == 0
,则返回 None
。
基本用法:
use std::time::Duration;
assert_eq!(Duration::new(2, 0).checked_div(2), Some(Duration::new(1, 0)));
assert_eq!(Duration::new(1, 0).checked_div(2), Some(Duration::new(0, 500_000_000)));
assert_eq!(Duration::new(2, 0).checked_div(0), None);
Run
以 f64
形式返回此 Duration
包含的秒数。
返回的值的确包含持续时间的小数 (nanosecond) 部分。
use std::time::Duration;
let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.as_secs_f64(), 2.7);
Run
以 f32
形式返回此 Duration
包含的秒数。
返回的值的确包含持续时间的小数 (nanosecond) 部分。
use std::time::Duration;
let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.as_secs_f32(), 2.7);
Run
从指定的秒数 (表示为 f64
) 创建一个新的 Duration
。
如果 secs
不是有限的,负的或 Duration
溢出,则此构造函数将为 panic。
use std::time::Duration;
let dur = Duration::from_secs_f64(2.7);
assert_eq!(dur, Duration::new(2, 700_000_000));
Run
🔬 This is a nightly-only experimental API. (
duration_checked_float
#83400)
from_secs_f64
的检查版本。
如果 secs
不是有限、负数或溢出 Duration
,则此构造函数将返回 Err
。
#![feature(duration_checked_float)]
use std::time::Duration;
let dur = Duration::try_from_secs_f64(2.7);
assert_eq!(dur, Ok(Duration::new(2, 700_000_000)));
let negative = Duration::try_from_secs_f64(-5.0);
assert!(negative.is_err());
Run
从指定的秒数 (表示为 f32
) 创建一个新的 Duration
。
如果 secs
不是有限的,负的或 Duration
溢出,则此构造函数将为 panic。
use std::time::Duration;
let dur = Duration::from_secs_f32(2.7);
assert_eq!(dur, Duration::new(2, 700_000_000));
Run
🔬 This is a nightly-only experimental API. (
duration_checked_float
#83400)
from_secs_f32
的检查版本。
如果 secs
不是有限、负数或溢出 Duration
,则此构造函数将返回 Err
。
#![feature(duration_checked_float)]
use std::time::Duration;
let dur = Duration::try_from_secs_f32(2.7);
assert_eq!(dur, Ok(Duration::new(2, 700_000_000)));
let negative = Duration::try_from_secs_f32(-5.0);
assert!(negative.is_err());
Run
将 Duration
乘以 f64
。
如果结果不是有限的,负的或 Duration
溢出,则此方法将为 panic。
use std::time::Duration;
let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.mul_f64(3.14), Duration::new(8, 478_000_000));
assert_eq!(dur.mul_f64(3.14e5), Duration::new(847_800, 0));
Run
将 Duration
乘以 f32
。
如果结果不是有限的,负的或 Duration
溢出,则此方法将为 panic。
use std::time::Duration;
let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.mul_f32(3.14), Duration::new(8, 478_000_640));
assert_eq!(dur.mul_f32(3.14e5), Duration::new(847799, 969_120_256));
Run
将 Duration
除以 f64
。
如果结果不是有限的,负的或 Duration
溢出,则此方法将为 panic。
use std::time::Duration;
let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.div_f64(3.14), Duration::new(0, 859_872_611));
assert_eq!(dur.div_f64(3.14e5), Duration::new(0, 8_598));
Run
将 Duration
除以 f32
。
如果结果不是有限的,负的或 Duration
溢出,则此方法将为 panic。
use std::time::Duration;
let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.div_f32(3.14), Duration::new(0, 859_872_576));
assert_eq!(dur.div_f32(3.14e5), Duration::new(0, 8_598));
Run
🔬 This is a nightly-only experimental API. (
div_duration
#63139)
将 Duration
除以 Duration
,然后返回 f64
。
#![feature(div_duration)]
use std::time::Duration;
let dur1 = Duration::new(2, 700_000_000);
let dur2 = Duration::new(5, 400_000_000);
assert_eq!(dur1.div_duration_f64(dur2), 0.5);
Run
🔬 This is a nightly-only experimental API. (
div_duration
#63139)
将 Duration
除以 Duration
,然后返回 f32
。
#![feature(div_duration)]
use std::time::Duration;
let dur1 = Duration::new(2, 700_000_000);
let dur2 = Duration::new(5, 400_000_000);
assert_eq!(dur1.div_duration_f32(dur2), 0.5);
Run
此方法测试的内容少于 (对于 self
和 other
),并且由 <
操作员使用。 Read more
此方法测试小于或等于 (对于 self
和 other
),并且由 <=
运算符使用。 Read more
此方法测试大于 (对于 self
和 other
),并且由 >
操作员使用。 Read more
此方法测试是否大于或等于 (对于 self
和 other
),并且由 >=
运算符使用。 Read more
使用迭代器并通过 “summing up” 项从元素生成 Self
的方法。 Read more
使用迭代器并通过 “summing up” 项从元素生成 Self
的方法。 Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into
#41263)
recently added