Struct std::time::Duration1.3.0[−][src]

pub struct Duration { /* fields omitted */ }
Expand description

Duration 类型代表时间跨度,通常用于系统超时。

每个 Duration 由整数秒和以纳秒表示的小数部分组成。 如果基础系统不支持纳秒级精度,则绑定系统超时的 API 通常会将纳秒数舍入。

Duration 实现了许多常见的 traits,包括 Add,Sub 和其他 ops traits。它通过返回零长度 Duration 来实现 Default。

Examples

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 值

Duration 特意没有 Display 隐含功能,因为有多种方法可以格式化时间范围以提高可读性。 Duration 提供一个 Debug impl 来显示值的完整精度。

Debug 输出使用非 ASCII “µs” 后缀微秒。 如果您的程序输出可能出现在不依赖于完全 Unicode 兼容性的上下文中,则您可能希望自己格式化 Duration 对象或使用 crate 这样做。

Implementations

🔬 This is a nightly-only experimental API. (duration_constants #57391)

持续时间为一秒。

Examples

#![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)

一毫秒的持续时间。

Examples

#![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)

一微秒的持续时间。

Examples

#![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 纳秒的持续时间。

Examples

#![feature(duration_constants)]
use std::time::Duration;

assert_eq!(Duration::NANOSECOND, Duration::from_nanos(1));
Run

持续时间为零。

Examples

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 年,目前在所有平台上都使用。

Examples

use std::time::Duration;

assert_eq!(Duration::MAX, Duration::new(u64::MAX, 1_000_000_000 - 1));
Run

根据指定的整数秒数和其他纳秒数创建一个新的 Duration。

如果纳秒数大于 10 亿 (十亿分之一秒),则它将延续到提供的秒数中。

Panics

如果纳秒的进位溢出秒计数器,则此构造方法将为 panic。

Examples

use std::time::Duration;

let five_seconds = Duration::new(5, 0);
Run

根据指定的整数秒创建一个新的 Duration。

Examples

use std::time::Duration;

let duration = Duration::from_secs(5);

assert_eq!(5, duration.as_secs());
assert_eq!(0, duration.subsec_nanos());
Run

从指定的毫秒数创建一个新的 Duration。

Examples

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

从指定的微秒数创建一个新的 Duration。

Examples

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

从指定的纳秒数创建一个新的 Duration。

Examples

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

如果此 Duration 不跨越时间,则返回 true。

Examples

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

返回此 Duration 包含的 whole 秒数。

返回的值不包括持续时间的小数 (nanosecond) 部分,可以使用 subsec_nanos 获得。

Examples

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

以毫秒为单位返回此 Duration 的小数部分。

当以毫秒表示时,这个方法不会返回持续时间的长度。 返回的数字始终代表秒的小数部分 (即,小于一千)。

Examples

use std::time::Duration;

let duration = Duration::from_millis(5432);
assert_eq!(duration.as_secs(), 5);
assert_eq!(duration.subsec_millis(), 432);
Run

以整个微秒为单位返回此 Duration 的小数部分。

当以微秒表示时,这个方法不会返回持续时间的长度。 返回的数字始终代表秒的小数部分 (即,小于一百万)。

Examples

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

返回此 Duration 的小数部分,以纳秒为单位。

当以纳秒表示时,这个方法不会返回持续时间的长度。 返回的数字始终代表秒的小数部分 (即,小于十亿)。

Examples

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

返回此 Duration 包含的总毫秒数。

Examples

use std::time::Duration;

let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_millis(), 5730);
Run

返回此 Duration 包含的总微秒数。

Examples

use std::time::Duration;

let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_micros(), 5730023);
Run

返回此 Duration 包含的纳秒总数。

Examples

use std::time::Duration;

let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_nanos(), 5730023852);
Run

检查 Duration 的添加。 计算 self + other,如果发生溢出则返回 None。

Examples

基本用法:

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。

Examples

#![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。

Examples

基本用法:

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。

Examples

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。

Examples

基本用法:

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。

Examples

#![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。

Examples

基本用法:

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) 部分。

Examples

use std::time::Duration;

let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.as_secs_f64(), 2.7);
Run

以 f32 形式返回此 Duration 包含的秒数。

返回的值的确包含持续时间的小数 (nanosecond) 部分。

Examples

use std::time::Duration;

let dur = Duration::new(2, 700_000_000);
assert_eq!(dur.as_secs_f32(), 2.7);
Run

从指定的秒数 (表示为 f64) 创建一个新的 Duration。

Panics

如果 secs 不是有限的,负的或 Duration 溢出,则此构造函数将为 panic。

Examples

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。

Examples

#![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。

Panics

如果 secs 不是有限的,负的或 Duration 溢出,则此构造函数将为 panic。

Examples

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。

Examples

#![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。

Panics

如果结果不是有限的,负的或 Duration 溢出,则此方法将为 panic。

Examples

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。

Panics

如果结果不是有限的,负的或 Duration 溢出,则此方法将为 panic。

Examples

use std::time::Duration;

let dur = Duration::new(2, 700_000_000);
// 请注意,由于舍入错误,结果与 8.478 和 847800.0 略有不同
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。

Panics

如果结果不是有限的,负的或 Duration 溢出,则此方法将为 panic。

Examples

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。

Panics

如果结果不是有限的,负的或 Duration 溢出,则此方法将为 panic。

Examples

use std::time::Duration;

let dur = Duration::new(2, 700_000_000);
// 请注意,由于舍入错误,结果与 0.859_872_611 略有不同
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。

Examples

#![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。

Examples

#![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

Trait Implementations

应用 + 运算符后的结果类型。

执行 + 操作。 Read more

Panics

如果结果时间点不能由基础数据结构体表示,则此函数可能为 panic。 没有 panic 的版本,请参见 Instant::checked_add。

应用 + 运算符后的结果类型。

Panics

如果结果时间点不能由基础数据结构体表示,则此函数可能为 panic。 没有 panic 的版本,请参见 SystemTime::checked_add。

应用 + 运算符后的结果类型。

执行 += 操作。 Read more

执行 += 操作。 Read more

执行 += 操作。 Read more

返回值的副本。 Read more

从 source 执行复制分配。 Read more

使用给定的格式化程序格式化该值。 Read more

返回类型的 “default value”。 Read more

应用 / 运算符后的结果类型。

执行 / 操作。 Read more

执行 /= 操作。 Read more

将该值输入给定的 Hasher。 Read more

将这种类型的切片送入给定的 Hasher 中。 Read more

应用 * 运算符后的结果类型。

执行 * 操作。 Read more

应用 * 运算符后的结果类型。

执行 * 操作。 Read more

执行 *= 操作。 Read more

此方法返回 self 和 other 之间的 Ordering。 Read more

比较并返回两个值中的最大值。 Read more

比较并返回两个值中的最小值。 Read more

将值限制为一定的时间间隔。 Read more

此方法测试 self 和 other 值是否相等,并由 == 使用。 Read more

此方法测试 !=。

如果存在,则此方法返回 self 和 other 值之间的顺序。 Read more

此方法测试的内容少于 (对于 self 和 other),并且由 < 操作员使用。 Read more

此方法测试小于或等于 (对于 self 和 other),并且由 <= 运算符使用。 Read more

此方法测试大于 (对于 self 和 other),并且由 > 操作员使用。 Read more

此方法测试是否大于或等于 (对于 self 和 other),并且由 >= 运算符使用。 Read more

应用 - 运算符后的结果类型。

执行 - 操作。 Read more

应用 - 运算符后的结果类型。

执行 - 操作。 Read more

应用 - 运算符后的结果类型。

执行 - 操作。 Read more

执行 -= 操作。 Read more

执行 -= 操作。 Read more

执行 -= 操作。 Read more

使用迭代器并通过 “summing up” 项从元素生成 Self 的方法。 Read more

使用迭代器并通过 “summing up” 项从元素生成 Self 的方法。 Read more

Auto Trait Implementations

Blanket Implementations

获取 self 的 TypeId。 Read more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

获得所有权后的结果类型。

通常通过克隆从借用数据中创建拥有的数据。 Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into #41263)

recently added

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。