pub struct Duration { /* private fields */ }Expand description
A Duration type to represent a span of time, typically used for system
timeouts.
Each Duration is composed of a whole number of seconds and a fractional part
represented in nanoseconds. If the underlying system does not support
nanosecond-level precision, APIs binding a system timeout will typically round up
the number of nanoseconds.
Durations implement many common traits, including Add, Sub, and other
ops traits. It implements Default by returning a zero-length Duration.
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);RunFormatting Duration values
Duration intentionally does not have a Display impl, as there are a
variety of ways to format spans of time for human readability. Duration
provides a Debug impl that shows the full precision of the value.
The Debug output uses the non-ASCII “µs” suffix for microseconds. If your
program output may appear in contexts that cannot rely on full Unicode
compatibility, you may wish to format Duration objects yourself or use a
crate to do so.
Implementations
impl Duration
source
impl Duration
sourcepub const MILLISECOND: Duration = Duration::from_millis(1)
source
pub const MILLISECOND: Duration = Duration::from_millis(1)
sourcepub const MICROSECOND: Duration = Duration::from_micros(1)
source
pub const MICROSECOND: Duration = Duration::from_micros(1)
sourcepub const NANOSECOND: Duration = Duration::from_nanos(1)
source
pub const NANOSECOND: Duration = Duration::from_nanos(1)
sourcepub const MAX: Duration = Duration::new(u64::MAX, NANOS_PER_SEC - 1)
1.53.0 · source
pub const MAX: Duration = Duration::new(u64::MAX, NANOS_PER_SEC - 1)
1.53.0 · sourceThe maximum duration.
May vary by platform as necessary. Must be able to contain the difference between
two instances of Instant or two instances of SystemTime.
This constraint gives it a value of about 584,942,417,355 years in practice,
which is currently used on all platforms.
Examples
use std::time::Duration;
assert_eq!(Duration::MAX, Duration::new(u64::MAX, 1_000_000_000 - 1));Runpub const fn new(secs: u64, nanos: u32) -> Duration
const: 1.58.0 · source
pub const fn new(secs: u64, nanos: u32) -> Duration
const: 1.58.0 · sourceCreates a new Duration from the specified number of whole seconds and
additional nanoseconds.
If the number of nanoseconds is greater than 1 billion (the number of nanoseconds in a second), then it will carry over into the seconds provided.
Panics
This constructor will panic if the carry from the nanoseconds overflows the seconds counter.
Examples
use std::time::Duration;
let five_seconds = Duration::new(5, 0);Runpub const fn from_millis(millis: u64) -> Duration
const: 1.32.0 · source
pub const fn from_millis(millis: u64) -> Duration
const: 1.32.0 · sourcepub const fn from_micros(micros: u64) -> Duration
1.27.0 (const: 1.32.0) · source
pub const fn from_micros(micros: u64) -> Duration
1.27.0 (const: 1.32.0) · sourcepub const fn from_nanos(nanos: u64) -> Duration
1.27.0 (const: 1.32.0) · source
pub const fn from_nanos(nanos: u64) -> Duration
1.27.0 (const: 1.32.0) · sourcepub const fn is_zero(&self) -> bool
1.53.0 (const: 1.53.0) · source
pub const fn is_zero(&self) -> bool
1.53.0 (const: 1.53.0) · sourceReturns true if this Duration spans no time.
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());Runpub const fn as_secs(&self) -> u64
const: 1.32.0 · source
pub const fn as_secs(&self) -> u64
const: 1.32.0 · sourceReturns the number of whole seconds contained by this Duration.
The returned value does not include the fractional (nanosecond) part of the
duration, which can be obtained using subsec_nanos.
Examples
use std::time::Duration;
let duration = Duration::new(5, 730023852);
assert_eq!(duration.as_secs(), 5);RunTo determine the total number of seconds represented by the Duration,
use as_secs in combination with 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);Runpub const fn subsec_millis(&self) -> u32
1.27.0 (const: 1.32.0) · source
pub const fn subsec_millis(&self) -> u32
1.27.0 (const: 1.32.0) · sourceReturns the fractional part of this Duration, in whole milliseconds.
This method does not return the length of the duration when represented by milliseconds. The returned number always represents a fractional portion of a second (i.e., it is less than one thousand).
Examples
use std::time::Duration;
let duration = Duration::from_millis(5432);
assert_eq!(duration.as_secs(), 5);
assert_eq!(duration.subsec_millis(), 432);Runpub const fn subsec_micros(&self) -> u32
1.27.0 (const: 1.32.0) · source
pub const fn subsec_micros(&self) -> u32
1.27.0 (const: 1.32.0) · sourceReturns the fractional part of this Duration, in whole microseconds.
This method does not return the length of the duration when represented by microseconds. The returned number always represents a fractional portion of a second (i.e., it is less than one million).
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);Runpub const fn subsec_nanos(&self) -> u32
const: 1.32.0 · source
pub const fn subsec_nanos(&self) -> u32
const: 1.32.0 · sourceReturns the fractional part of this Duration, in nanoseconds.
This method does not return the length of the duration when represented by nanoseconds. The returned number always represents a fractional portion of a second (i.e., it is less than one billion).
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);Runpub const fn checked_add(self, rhs: Duration) -> Option<Duration>
1.16.0 (const: 1.58.0) · source
pub const fn checked_add(self, rhs: Duration) -> Option<Duration>
1.16.0 (const: 1.58.0) · sourceChecked Duration addition. Computes self + other, returning None
if overflow occurred.
Examples
Basic usage:
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);Runpub const fn saturating_add(self, rhs: Duration) -> Duration
1.53.0 (const: 1.58.0) · source
pub const fn saturating_add(self, rhs: Duration) -> Duration
1.53.0 (const: 1.58.0) · sourceSaturating Duration addition. Computes self + other, returning Duration::MAX
if overflow occurred.
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);Runpub const fn checked_sub(self, rhs: Duration) -> Option<Duration>
1.16.0 (const: 1.58.0) · source
pub const fn checked_sub(self, rhs: Duration) -> Option<Duration>
1.16.0 (const: 1.58.0) · sourceChecked Duration subtraction. Computes self - other, returning None
if the result would be negative or if overflow occurred.
Examples
Basic usage:
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);Runpub const fn saturating_sub(self, rhs: Duration) -> Duration
1.53.0 (const: 1.58.0) · source
pub const fn saturating_sub(self, rhs: Duration) -> Duration
1.53.0 (const: 1.58.0) · sourceSaturating Duration subtraction. Computes self - other, returning Duration::ZERO
if the result would be negative or if overflow occurred.
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);Runpub const fn checked_mul(self, rhs: u32) -> Option<Duration>
1.16.0 (const: 1.58.0) · source
pub const fn checked_mul(self, rhs: u32) -> Option<Duration>
1.16.0 (const: 1.58.0) · sourcepub const fn saturating_mul(self, rhs: u32) -> Duration
1.53.0 (const: 1.58.0) · source
pub const fn saturating_mul(self, rhs: u32) -> Duration
1.53.0 (const: 1.58.0) · sourceSaturating Duration multiplication. Computes self * other, returning
Duration::MAX if overflow occurred.
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);Runpub const fn checked_div(self, rhs: u32) -> Option<Duration>
1.16.0 (const: 1.58.0) · source
pub const fn checked_div(self, rhs: u32) -> Option<Duration>
1.16.0 (const: 1.58.0) · sourceChecked Duration division. Computes self / other, returning None
if other == 0.
Examples
Basic usage:
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);Runpub fn as_secs_f64(&self) -> f64
1.38.0 (const: unstable) · source
pub fn as_secs_f64(&self) -> f64
1.38.0 (const: unstable) · sourcepub fn as_secs_f32(&self) -> f32
1.38.0 (const: unstable) · source
pub fn as_secs_f32(&self) -> f32
1.38.0 (const: unstable) · sourcepub fn from_secs_f64(secs: f64) -> Duration
1.38.0 (const: unstable) · source
pub fn from_secs_f64(secs: f64) -> Duration
1.38.0 (const: unstable) · sourceCreates a new Duration from the specified number of seconds represented
as f64.
Panics
This constructor will panic if secs is negative, overflows Duration or not finite.
Examples
use std::time::Duration;
let res = Duration::from_secs_f64(0.0);
assert_eq!(res, Duration::new(0, 0));
let res = Duration::from_secs_f64(1e-20);
assert_eq!(res, Duration::new(0, 0));
let res = Duration::from_secs_f64(4.2e-7);
assert_eq!(res, Duration::new(0, 420));
let res = Duration::from_secs_f64(2.7);
assert_eq!(res, Duration::new(2, 700_000_000));
let res = Duration::from_secs_f64(3e10);
assert_eq!(res, Duration::new(30_000_000_000, 0));
// subnormal float
let res = Duration::from_secs_f64(f64::from_bits(1));
assert_eq!(res, Duration::new(0, 0));
// conversion uses truncation, not rounding
let res = Duration::from_secs_f64(0.999e-9);
assert_eq!(res, Duration::new(0, 0));Runpub fn from_secs_f32(secs: f32) -> Duration
1.38.0 (const: unstable) · source
pub fn from_secs_f32(secs: f32) -> Duration
1.38.0 (const: unstable) · sourceCreates a new Duration from the specified number of seconds represented
as f32.
Panics
This constructor will panic if secs is negative, overflows Duration or not finite.
Examples
use std::time::Duration;
let res = Duration::from_secs_f32(0.0);
assert_eq!(res, Duration::new(0, 0));
let res = Duration::from_secs_f32(1e-20);
assert_eq!(res, Duration::new(0, 0));
let res = Duration::from_secs_f32(4.2e-7);
assert_eq!(res, Duration::new(0, 419));
let res = Duration::from_secs_f32(2.7);
assert_eq!(res, Duration::new(2, 700_000_047));
let res = Duration::from_secs_f32(3e10);
assert_eq!(res, Duration::new(30_000_001_024, 0));
// subnormal float
let res = Duration::from_secs_f32(f32::from_bits(1));
assert_eq!(res, Duration::new(0, 0));
// conversion uses truncation, not rounding
let res = Duration::from_secs_f32(0.999e-9);
assert_eq!(res, Duration::new(0, 0));Runpub fn mul_f64(self, rhs: f64) -> Duration
1.38.0 (const: unstable) · source
pub fn mul_f64(self, rhs: f64) -> Duration
1.38.0 (const: unstable) · sourceMultiplies Duration by f64.
Panics
This method will panic if result is negative, overflows Duration or not finite.
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));Runpub fn mul_f32(self, rhs: f32) -> Duration
1.38.0 (const: unstable) · source
pub fn mul_f32(self, rhs: f32) -> Duration
1.38.0 (const: unstable) · sourceMultiplies Duration by f32.
Panics
This method will panic if result is negative, overflows Duration or not finite.
Examples
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(847800, 0));Runpub fn div_f64(self, rhs: f64) -> Duration
1.38.0 (const: unstable) · source
pub fn div_f64(self, rhs: f64) -> Duration
1.38.0 (const: unstable) · sourceDivide Duration by f64.
Panics
This method will panic if result is negative, overflows Duration or not finite.
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));
// note that truncation is used, not rounding
assert_eq!(dur.div_f64(3.14e5), Duration::new(0, 8_598));Runpub fn div_f32(self, rhs: f32) -> Duration
1.38.0 (const: unstable) · source
pub fn div_f32(self, rhs: f32) -> Duration
1.38.0 (const: unstable) · sourceDivide Duration by f32.
Panics
This method will panic if result is negative, overflows Duration or not finite.
Examples
use std::time::Duration;
let dur = Duration::new(2, 700_000_000);
// note that due to rounding errors result is slightly
// different from 0.859_872_611
assert_eq!(dur.div_f32(3.14), Duration::new(0, 859_872_579));
// note that truncation is used, not rounding
assert_eq!(dur.div_f32(3.14e5), Duration::new(0, 8_598));Runpub fn div_duration_f64(self, rhs: Duration) -> f64
const: unstable · source
pub fn div_duration_f64(self, rhs: Duration) -> f64
const: unstable · sourcepub fn div_duration_f32(self, rhs: Duration) -> f32
const: unstable · source
pub fn div_duration_f32(self, rhs: Duration) -> f32
const: unstable · sourceimpl Duration
source
impl Duration
sourcepub const fn try_from_secs_f32(
secs: f32
) -> Result<Duration, FromFloatSecsError>
source
pub const fn try_from_secs_f32(
secs: f32
) -> Result<Duration, FromFloatSecsError>
sourceThe checked version of from_secs_f32.
This constructor will return an Err if secs is negative, overflows Duration or not finite.
Examples
#![feature(duration_checked_float)]
use std::time::Duration;
let res = Duration::try_from_secs_f32(0.0);
assert_eq!(res, Ok(Duration::new(0, 0)));
let res = Duration::try_from_secs_f32(1e-20);
assert_eq!(res, Ok(Duration::new(0, 0)));
let res = Duration::try_from_secs_f32(4.2e-7);
assert_eq!(res, Ok(Duration::new(0, 419)));
let res = Duration::try_from_secs_f32(2.7);
assert_eq!(res, Ok(Duration::new(2, 700_000_047)));
let res = Duration::try_from_secs_f32(3e10);
assert_eq!(res, Ok(Duration::new(30_000_001_024, 0)));
// subnormal float:
let res = Duration::try_from_secs_f32(f32::from_bits(1));
assert_eq!(res, Ok(Duration::new(0, 0)));
// conversion uses truncation, not rounding
let res = Duration::try_from_secs_f32(0.999e-9);
assert_eq!(res, Ok(Duration::new(0, 0)));
let res = Duration::try_from_secs_f32(-5.0);
assert!(res.is_err());
let res = Duration::try_from_secs_f32(f32::NAN);
assert!(res.is_err());
let res = Duration::try_from_secs_f32(2e19);
assert!(res.is_err());Runpub const fn try_from_secs_f64(
secs: f64
) -> Result<Duration, FromFloatSecsError>
source
pub const fn try_from_secs_f64(
secs: f64
) -> Result<Duration, FromFloatSecsError>
sourceThe checked version of from_secs_f64.
This constructor will return an Err if secs is negative, overflows Duration or not finite.
Examples
#![feature(duration_checked_float)]
use std::time::Duration;
let res = Duration::try_from_secs_f64(0.0);
assert_eq!(res, Ok(Duration::new(0, 0)));
let res = Duration::try_from_secs_f64(1e-20);
assert_eq!(res, Ok(Duration::new(0, 0)));
let res = Duration::try_from_secs_f64(4.2e-7);
assert_eq!(res, Ok(Duration::new(0, 420)));
let res = Duration::try_from_secs_f64(2.7);
assert_eq!(res, Ok(Duration::new(2, 700_000_000)));
let res = Duration::try_from_secs_f64(3e10);
assert_eq!(res, Ok(Duration::new(30_000_000_000, 0)));
// subnormal float
let res = Duration::try_from_secs_f64(f64::from_bits(1));
assert_eq!(res, Ok(Duration::new(0, 0)));
// conversion uses truncation, not rounding
let res = Duration::try_from_secs_f32(0.999e-9);
assert_eq!(res, Ok(Duration::new(0, 0)));
let res = Duration::try_from_secs_f64(-5.0);
assert!(res.is_err());
let res = Duration::try_from_secs_f64(f64::NAN);
assert!(res.is_err());
let res = Duration::try_from_secs_f64(2e19);
assert!(res.is_err());RunTrait Implementations
impl Add<Duration> for SystemTime
1.8.0 · source
impl Add<Duration> for SystemTime
1.8.0 · sourcefn add(self, dur: Duration) -> SystemTime
source
fn add(self, dur: Duration) -> SystemTime
sourcePanics
This function may panic if the resulting point in time cannot be represented by the
underlying data structure. See SystemTime::checked_add for a version without panic.
type Output = SystemTime
type Output = SystemTime
The resulting type after applying the + operator.
impl AddAssign<Duration> for Duration
1.9.0 · source
impl AddAssign<Duration> for Duration
1.9.0 · sourcefn add_assign(&mut self, rhs: Duration)
source
fn add_assign(&mut self, rhs: Duration)
sourcePerforms the += operation. Read more
impl AddAssign<Duration> for Instant
1.9.0 · source
impl AddAssign<Duration> for Instant
1.9.0 · sourcefn add_assign(&mut self, other: Duration)
source
fn add_assign(&mut self, other: Duration)
sourcePerforms the += operation. Read more
impl AddAssign<Duration> for SystemTime
1.9.0 · source
impl AddAssign<Duration> for SystemTime
1.9.0 · sourcefn add_assign(&mut self, other: Duration)
source
fn add_assign(&mut self, other: Duration)
sourcePerforms the += operation. Read more
impl DivAssign<u32> for Duration
1.9.0 · source
impl DivAssign<u32> for Duration
1.9.0 · sourcefn div_assign(&mut self, rhs: u32)
source
fn div_assign(&mut self, rhs: u32)
sourcePerforms the /= operation. Read more
impl MulAssign<u32> for Duration
1.9.0 · source
impl MulAssign<u32> for Duration
1.9.0 · sourcefn mul_assign(&mut self, rhs: u32)
source
fn mul_assign(&mut self, rhs: u32)
sourcePerforms the *= operation. Read more
impl Ord for Duration
source
impl Ord for Duration
sourceimpl PartialOrd<Duration> for Duration
source
impl PartialOrd<Duration> for Duration
sourcefn partial_cmp(&self, other: &Duration) -> Option<Ordering>
source
fn partial_cmp(&self, other: &Duration) -> Option<Ordering>
sourceThis method returns an ordering between self and other values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
1.0.0 · source
fn lt(&self, other: &Rhs) -> bool
1.0.0 · sourceThis method tests less than (for self and other) and is used by the < operator. Read more
fn le(&self, other: &Rhs) -> bool
1.0.0 · source
fn le(&self, other: &Rhs) -> bool
1.0.0 · sourceThis method tests less than or equal to (for self and other) and is used by the <=
operator. Read more
impl Sub<Duration> for SystemTime
1.8.0 · source
impl Sub<Duration> for SystemTime
1.8.0 · sourcetype Output = SystemTime
type Output = SystemTime
The resulting type after applying the - operator.
fn sub(self, dur: Duration) -> SystemTime
source
fn sub(self, dur: Duration) -> SystemTime
sourcePerforms the - operation. Read more
impl SubAssign<Duration> for Duration
1.9.0 · source
impl SubAssign<Duration> for Duration
1.9.0 · sourcefn sub_assign(&mut self, rhs: Duration)
source
fn sub_assign(&mut self, rhs: Duration)
sourcePerforms the -= operation. Read more
impl SubAssign<Duration> for Instant
1.9.0 · source
impl SubAssign<Duration> for Instant
1.9.0 · sourcefn sub_assign(&mut self, other: Duration)
source
fn sub_assign(&mut self, other: Duration)
sourcePerforms the -= operation. Read more
impl SubAssign<Duration> for SystemTime
1.9.0 · source
impl SubAssign<Duration> for SystemTime
1.9.0 · sourcefn sub_assign(&mut self, other: Duration)
source
fn sub_assign(&mut self, other: Duration)
sourcePerforms the -= operation. Read more
impl Copy for Duration
sourceimpl Eq for Duration
sourceimpl StructuralEq for Duration
sourceimpl StructuralPartialEq for Duration
sourceAuto Trait Implementations
impl RefUnwindSafe for Duration
impl Send for Duration
impl Sync for Duration
impl Unpin for Duration
impl UnwindSafe for Duration
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
source
impl<T> BorrowMut<T> for T where
T: ?Sized,
sourcefn borrow_mut(&mut self) -> &mut T
const: unstable · source
fn borrow_mut(&mut self) -> &mut T
const: unstable · sourceMutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
source
impl<T> ToOwned for T where
T: Clone,
sourcetype Owned = T
type Owned = T
The resulting type after obtaining ownership.
fn clone_into(&self, target: &mut T)
source
fn clone_into(&self, target: &mut T)
sourceUses borrowed data to replace owned data, usually by cloning. Read more