Struct Duration
struct Duration { ... }
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 Duration;
let five_seconds = new;
let five_seconds_and_five_nanos = five_seconds + new;
assert_eq!;
assert_eq!;
let ten_millis = from_millis;
Formatting 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
const fn new(secs: u64, nanos: u32) -> DurationCreates a new
Durationfrom 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 Duration; let five_seconds = new;const fn from_secs(secs: u64) -> DurationCreates a new
Durationfrom the specified number of whole seconds.Examples
use Duration; let duration = from_secs; assert_eq!; assert_eq!;const fn from_millis(millis: u64) -> DurationCreates a new
Durationfrom the specified number of milliseconds.Examples
use Duration; let duration = from_millis; assert_eq!; assert_eq!;const fn from_micros(micros: u64) -> DurationCreates a new
Durationfrom the specified number of microseconds.Examples
use Duration; let duration = from_micros; assert_eq!; assert_eq!;const fn from_nanos(nanos: u64) -> DurationCreates a new
Durationfrom the specified number of nanoseconds.Note: Using this on the return value of
as_nanos()might cause unexpected behavior:as_nanos()returns a u128, and can return values that do not fit in u64, e.g. 585 years. Instead, consider using the patternDuration::new(d.as_secs(), d.subsec_nanos())if you cannot copy/clone the Duration directly.Examples
use Duration; let duration = from_nanos; assert_eq!; assert_eq!;const fn from_nanos_u128(nanos: u128) -> DurationCreates a new
Durationfrom the specified number of nanoseconds.Panics
Panics if the given number of nanoseconds is greater than
Duration::MAX.Examples
use Duration; let nanos = 10_u128.pow + 321; let duration = from_nanos_u128; assert_eq!; assert_eq!;const fn from_weeks(weeks: u64) -> DurationCreates a new
Durationfrom the specified number of weeks.Panics
Panics if the given number of weeks overflows the
Durationsize.Examples
use Duration; let duration = from_weeks; assert_eq!; assert_eq!;const fn from_days(days: u64) -> DurationCreates a new
Durationfrom the specified number of days.Panics
Panics if the given number of days overflows the
Durationsize.Examples
use Duration; let duration = from_days; assert_eq!; assert_eq!;const fn from_hours(hours: u64) -> DurationCreates a new
Durationfrom the specified number of hours.Panics
Panics if the given number of hours overflows the
Durationsize.Examples
use Duration; let duration = from_hours; assert_eq!; assert_eq!;const fn from_mins(mins: u64) -> DurationCreates a new
Durationfrom the specified number of minutes.Panics
Panics if the given number of minutes overflows the
Durationsize.Examples
use Duration; let duration = from_mins; assert_eq!; assert_eq!;const fn is_zero(self: &Self) -> boolReturns true if this
Durationspans no time.Examples
use Duration; assert!; assert!; assert!; assert!; assert!; assert!; assert!;const fn as_secs(self: &Self) -> u64Returns 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 Duration; let duration = new; assert_eq!;To determine the total number of seconds represented by the
Durationincluding the fractional part, useas_secs_f64oras_secs_f32const fn subsec_millis(self: &Self) -> u32Returns 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 Duration; let duration = from_millis; assert_eq!; assert_eq!;const fn subsec_micros(self: &Self) -> u32Returns 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 Duration; let duration = from_micros; assert_eq!; assert_eq!;const fn subsec_nanos(self: &Self) -> u32Returns 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 Duration; let duration = from_millis; assert_eq!; assert_eq!;const fn as_millis(self: &Self) -> u128Returns the total number of whole milliseconds contained by this
Duration.Examples
use Duration; let duration = new; assert_eq!;const fn as_micros(self: &Self) -> u128Returns the total number of whole microseconds contained by this
Duration.Examples
use Duration; let duration = new; assert_eq!;const fn as_nanos(self: &Self) -> u128Returns the total number of nanoseconds contained by this
Duration.Examples
use Duration; let duration = new; assert_eq!;const fn abs_diff(self: Self, other: Duration) -> DurationComputes the absolute difference between
selfandother.Examples
use Duration; assert_eq!; assert_eq!;const fn checked_add(self: Self, rhs: Duration) -> Option<Duration>Checked
Durationaddition. Computesself + other, returningNoneif overflow occurred.Examples
use Duration; assert_eq!; assert_eq!;const fn saturating_add(self: Self, rhs: Duration) -> DurationSaturating
Durationaddition. Computesself + other, returningDuration::MAXif overflow occurred.Examples
use Duration; assert_eq!; assert_eq!;const fn checked_sub(self: Self, rhs: Duration) -> Option<Duration>Checked
Durationsubtraction. Computesself - other, returningNoneif the result would be negative or if overflow occurred.Examples
use Duration; assert_eq!; assert_eq!;const fn saturating_sub(self: Self, rhs: Duration) -> DurationSaturating
Durationsubtraction. Computesself - other, returningDuration::ZEROif the result would be negative or if overflow occurred.Examples
use Duration; assert_eq!; assert_eq!;const fn checked_mul(self: Self, rhs: u32) -> Option<Duration>Checked
Durationmultiplication. Computesself * other, returningNoneif overflow occurred.Examples
use Duration; assert_eq!; assert_eq!;const fn saturating_mul(self: Self, rhs: u32) -> DurationSaturating
Durationmultiplication. Computesself * other, returningDuration::MAXif overflow occurred.Examples
use Duration; assert_eq!; assert_eq!;const fn checked_div(self: Self, rhs: u32) -> Option<Duration>Checked
Durationdivision. Computesself / other, returningNoneifother == 0.Examples
use Duration; assert_eq!; assert_eq!; assert_eq!;const fn as_secs_f64(self: &Self) -> f64Returns the number of seconds contained by this
Durationasf64.The returned value includes the fractional (nanosecond) part of the duration.
Examples
use Duration; let dur = new; assert_eq!;const fn as_secs_f32(self: &Self) -> f32Returns the number of seconds contained by this
Durationasf32.The returned value includes the fractional (nanosecond) part of the duration.
Examples
use Duration; let dur = new; assert_eq!;const fn as_millis_f64(self: &Self) -> f64Returns the number of milliseconds contained by this
Durationasf64.The returned value includes the fractional (nanosecond) part of the duration.
Examples
use Duration; let dur = new; assert_eq!;const fn as_millis_f32(self: &Self) -> f32Returns the number of milliseconds contained by this
Durationasf32.The returned value includes the fractional (nanosecond) part of the duration.
Examples
use Duration; let dur = new; assert_eq!;fn from_secs_f64(secs: f64) -> DurationCreates a new
Durationfrom the specified number of seconds represented asf64.Panics
This constructor will panic if
secsis negative, overflowsDurationor not finite.Examples
use Duration; let res = from_secs_f64; assert_eq!; let res = from_secs_f64; assert_eq!; let res = from_secs_f64; assert_eq!; let res = from_secs_f64; assert_eq!; let res = from_secs_f64; assert_eq!; // subnormal float let res = from_secs_f64; assert_eq!; // conversion uses rounding let res = from_secs_f64; assert_eq!;fn from_secs_f32(secs: f32) -> DurationCreates a new
Durationfrom the specified number of seconds represented asf32.Panics
This constructor will panic if
secsis negative, overflowsDurationor not finite.Examples
use Duration; let res = from_secs_f32; assert_eq!; let res = from_secs_f32; assert_eq!; let res = from_secs_f32; assert_eq!; let res = from_secs_f32; assert_eq!; let res = from_secs_f32; assert_eq!; // subnormal float let res = from_secs_f32; assert_eq!; // conversion uses rounding let res = from_secs_f32; assert_eq!;fn mul_f64(self: Self, rhs: f64) -> DurationMultiplies
Durationbyf64.Panics
This method will panic if result is negative, overflows
Durationor not finite.Examples
use Duration; let dur = new; assert_eq!; assert_eq!;fn mul_f32(self: Self, rhs: f32) -> DurationMultiplies
Durationbyf32.Panics
This method will panic if result is negative, overflows
Durationor not finite.Examples
use Duration; let dur = new; assert_eq!; assert_eq!;fn div_f64(self: Self, rhs: f64) -> DurationDivides
Durationbyf64.Panics
This method will panic if result is negative, overflows
Durationor not finite.Examples
use Duration; let dur = new; assert_eq!; assert_eq!;fn div_f32(self: Self, rhs: f32) -> DurationDivides
Durationbyf32.Panics
This method will panic if result is negative, overflows
Durationor not finite.Examples
use Duration; let dur = new; // note that due to rounding errors result is slightly // different from 0.859_872_611 assert_eq!; assert_eq!;const fn div_duration_f64(self: Self, rhs: Duration) -> f64Divides
DurationbyDurationand returnsf64.Examples
use Duration; let dur1 = new; let dur2 = new; assert_eq!;const fn div_duration_f32(self: Self, rhs: Duration) -> f32Divides
DurationbyDurationand returnsf32.Examples
use Duration; let dur1 = new; let dur2 = new; assert_eq!;const fn div_duration_floor(self: Self, rhs: Duration) -> u128Divides
DurationbyDurationand returnsu128, rounding the result towards zero.Examples
use Duration; let dur = new; assert_eq!; assert_eq!; assert_eq!;const fn div_duration_ceil(self: Self, rhs: Duration) -> u128Divides
DurationbyDurationand returnsu128, rounding the result towards positive infinity.Examples
use Duration; let dur = new; assert_eq!; assert_eq!; assert_eq!;
impl Duration
fn try_from_secs_f32(secs: f32) -> Result<Duration, TryFromFloatSecsError>The checked version of
from_secs_f32.This constructor will return an
Errifsecsis negative, overflowsDurationor not finite.Examples
use Duration; let res = try_from_secs_f32; assert_eq!; let res = try_from_secs_f32; assert_eq!; let res = try_from_secs_f32; assert_eq!; let res = try_from_secs_f32; assert_eq!; let res = try_from_secs_f32; assert_eq!; // subnormal float: let res = try_from_secs_f32; assert_eq!; let res = try_from_secs_f32; assert!; let res = try_from_secs_f32; assert!; let res = try_from_secs_f32; assert!; // the conversion uses rounding with tie resolution to even let res = try_from_secs_f32; assert_eq!; // this float represents exactly 976562.5e-9 let val = f32from_bits; let res = try_from_secs_f32; assert_eq!; // this float represents exactly 2929687.5e-9 let val = f32from_bits; let res = try_from_secs_f32; assert_eq!; // this float represents exactly 1.000_976_562_5 let val = f32from_bits; let res = try_from_secs_f32; assert_eq!; // this float represents exactly 1.002_929_687_5 let val = f32from_bits; let res = try_from_secs_f32; assert_eq!;fn try_from_secs_f64(secs: f64) -> Result<Duration, TryFromFloatSecsError>The checked version of
from_secs_f64.This constructor will return an
Errifsecsis negative, overflowsDurationor not finite.Examples
use Duration; let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; // subnormal float let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert!; let res = try_from_secs_f64; assert!; let res = try_from_secs_f64; assert!; // the conversion uses rounding with tie resolution to even let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; let res = try_from_secs_f64; assert_eq!; // this float represents exactly 976562.5e-9 let val = f64from_bits; let res = try_from_secs_f64; assert_eq!; // this float represents exactly 2929687.5e-9 let val = f64from_bits; let res = try_from_secs_f64; assert_eq!; // this float represents exactly 1.000_976_562_5 let val = f64from_bits; let res = try_from_secs_f64; assert_eq!; // this float represents exactly 1.002_929_687_5 let val = f64from_bits; let res = try_from_secs_f64; assert_eq!;
impl Add for Duration
fn add(self: Self, rhs: Duration) -> Duration
impl AddAssign for Duration
fn add_assign(self: &mut Self, rhs: Duration)
impl Clone for Duration
fn clone(self: &Self) -> Duration
impl Copy for Duration
impl Debug for Duration
fn fmt(self: &Self, f: &mut fmt::Formatter<'_>) -> fmt::Result
impl Default for Duration
fn default() -> Duration
impl Div for Duration
fn div(self: Self, rhs: u32) -> Duration
impl DivAssign for Duration
fn div_assign(self: &mut Self, rhs: u32)
impl Eq for Duration
impl Freeze for Duration
impl Hash for Duration
fn hash<__H: $crate::hash::Hasher>(self: &Self, state: &mut __H)
impl Mul for Duration
fn mul(self: Self, rhs: u32) -> Duration
impl MulAssign for Duration
fn mul_assign(self: &mut Self, rhs: u32)
impl Ord for Duration
fn cmp(self: &Self, other: &Duration) -> $crate::cmp::Ordering
impl PartialEq for Duration
fn eq(self: &Self, other: &Duration) -> bool
impl PartialOrd for Duration
fn partial_cmp(self: &Self, other: &Duration) -> $crate::option::Option<$crate::cmp::Ordering>
impl RefUnwindSafe for Duration
impl Send for Duration
impl StructuralPartialEq for Duration
impl Sub for Duration
fn sub(self: Self, rhs: Duration) -> Duration
impl SubAssign for Duration
fn sub_assign(self: &mut Self, rhs: Duration)
impl Sum for Duration
fn sum<I: Iterator<Item = Duration>>(iter: I) -> Duration
impl Sync for Duration
impl Unpin for Duration
impl UnwindSafe for Duration
impl<'a> Sum for Duration
fn sum<I: Iterator<Item = &'a Duration>>(iter: I) -> Duration
impl<T> Any for Duration
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for Duration
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for Duration
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for Duration
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for Duration
fn from(t: T) -> TReturns the argument unchanged.
impl<T, U> Into for Duration
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for Duration
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for Duration
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>