pub struct Duration { /* private fields */ }
Expand description
A span of time with nanosecond precision.
Each Duration
is composed of a whole number of seconds and a fractional part represented in
nanoseconds.
This implementation allows for negative durations, unlike core::time::Duration
.
Implementations§
Source§impl Duration
impl Duration
Sourcepub const NANOSECOND: Self = _
pub const NANOSECOND: Self = _
Sourcepub const MICROSECOND: Self = _
pub const MICROSECOND: Self = _
Sourcepub const MILLISECOND: Self = _
pub const MILLISECOND: Self = _
Sourcepub const MIN: Self = _
pub const MIN: Self = _
The minimum possible duration. Adding any negative duration to this will cause an overflow.
Sourcepub const MAX: Self = _
pub const MAX: Self = _
The maximum possible duration. Adding any positive duration to this will cause an overflow.
Sourcepub const fn is_negative(self) -> bool
pub const fn is_negative(self) -> bool
Sourcepub const fn is_positive(self) -> bool
pub const fn is_positive(self) -> bool
Sourcepub const fn unsigned_abs(self) -> StdDuration
pub const fn unsigned_abs(self) -> StdDuration
Convert the existing Duration
to a std::time::Duration
and its sign. This returns a
std::time::Duration
and does not saturate the returned value (unlike Duration::abs
).
Sourcepub const fn new(seconds: i64, nanoseconds: i32) -> Self
pub const fn new(seconds: i64, nanoseconds: i32) -> Self
Create a new Duration
with the provided seconds and nanoseconds. If nanoseconds is at
least ±109, it will wrap to the number of seconds.
assert_eq!(Duration::new(1, 0), 1.seconds());
assert_eq!(Duration::new(-1, 0), (-1).seconds());
assert_eq!(Duration::new(1, 2_000_000_000), 3.seconds());
§Panics
This may panic if an overflow occurs.
Sourcepub const fn weeks(weeks: i64) -> Self
pub const fn weeks(weeks: i64) -> Self
Create a new Duration
with the given number of weeks. Equivalent to
Duration::seconds(weeks * 604_800)
.
§Panics
This may panic if an overflow occurs.
Sourcepub const fn days(days: i64) -> Self
pub const fn days(days: i64) -> Self
Create a new Duration
with the given number of days. Equivalent to
Duration::seconds(days * 86_400)
.
§Panics
This may panic if an overflow occurs.
Sourcepub const fn hours(hours: i64) -> Self
pub const fn hours(hours: i64) -> Self
Create a new Duration
with the given number of hours. Equivalent to
Duration::seconds(hours * 3_600)
.
§Panics
This may panic if an overflow occurs.
Sourcepub const fn minutes(minutes: i64) -> Self
pub const fn minutes(minutes: i64) -> Self
Create a new Duration
with the given number of minutes. Equivalent to
Duration::seconds(minutes * 60)
.
§Panics
This may panic if an overflow occurs.
Sourcepub fn seconds_f64(seconds: f64) -> Self
pub fn seconds_f64(seconds: f64) -> Self
Sourcepub fn seconds_f32(seconds: f32) -> Self
pub fn seconds_f32(seconds: f32) -> Self
Sourcepub fn saturating_seconds_f64(seconds: f64) -> Self
pub fn saturating_seconds_f64(seconds: f64) -> Self
Creates a new Duration
from the specified number of seconds
represented as f64
. Any values that are out of bounds are saturated at
the minimum or maximum respectively. NaN
gets turned into a Duration
of 0 seconds.
assert_eq!(Duration::saturating_seconds_f64(0.5), 0.5.seconds());
assert_eq!(Duration::saturating_seconds_f64(-0.5), (-0.5).seconds());
assert_eq!(
Duration::saturating_seconds_f64(f64::NAN),
Duration::new(0, 0),
);
assert_eq!(
Duration::saturating_seconds_f64(f64::NEG_INFINITY),
Duration::MIN,
);
assert_eq!(
Duration::saturating_seconds_f64(f64::INFINITY),
Duration::MAX,
);
Sourcepub fn saturating_seconds_f32(seconds: f32) -> Self
pub fn saturating_seconds_f32(seconds: f32) -> Self
Creates a new Duration
from the specified number of seconds
represented as f32
. Any values that are out of bounds are saturated at
the minimum or maximum respectively. NaN
gets turned into a Duration
of 0 seconds.
assert_eq!(Duration::saturating_seconds_f32(0.5), 0.5.seconds());
assert_eq!(Duration::saturating_seconds_f32(-0.5), (-0.5).seconds());
assert_eq!(
Duration::saturating_seconds_f32(f32::NAN),
Duration::new(0, 0),
);
assert_eq!(
Duration::saturating_seconds_f32(f32::NEG_INFINITY),
Duration::MIN,
);
assert_eq!(
Duration::saturating_seconds_f32(f32::INFINITY),
Duration::MAX,
);
Sourcepub fn checked_seconds_f64(seconds: f64) -> Option<Self>
pub fn checked_seconds_f64(seconds: f64) -> Option<Self>
Creates a new Duration
from the specified number of seconds
represented as f64
. Returns None
if the Duration
can’t be
represented.
assert_eq!(Duration::checked_seconds_f64(0.5), Some(0.5.seconds()));
assert_eq!(Duration::checked_seconds_f64(-0.5), Some((-0.5).seconds()));
assert_eq!(Duration::checked_seconds_f64(f64::NAN), None);
assert_eq!(Duration::checked_seconds_f64(f64::NEG_INFINITY), None);
assert_eq!(Duration::checked_seconds_f64(f64::INFINITY), None);
Sourcepub fn checked_seconds_f32(seconds: f32) -> Option<Self>
pub fn checked_seconds_f32(seconds: f32) -> Option<Self>
Creates a new Duration
from the specified number of seconds
represented as f32
. Returns None
if the Duration
can’t be
represented.
assert_eq!(Duration::checked_seconds_f32(0.5), Some(0.5.seconds()));
assert_eq!(Duration::checked_seconds_f32(-0.5), Some((-0.5).seconds()));
assert_eq!(Duration::checked_seconds_f32(f32::NAN), None);
assert_eq!(Duration::checked_seconds_f32(f32::NEG_INFINITY), None);
assert_eq!(Duration::checked_seconds_f32(f32::INFINITY), None);
Sourcepub const fn milliseconds(milliseconds: i64) -> Self
pub const fn milliseconds(milliseconds: i64) -> Self
Sourcepub const fn microseconds(microseconds: i64) -> Self
pub const fn microseconds(microseconds: i64) -> Self
Sourcepub const fn nanoseconds(nanoseconds: i64) -> Self
pub const fn nanoseconds(nanoseconds: i64) -> Self
Sourcepub const fn whole_weeks(self) -> i64
pub const fn whole_weeks(self) -> i64
Sourcepub const fn whole_days(self) -> i64
pub const fn whole_days(self) -> i64
Sourcepub const fn whole_hours(self) -> i64
pub const fn whole_hours(self) -> i64
Sourcepub const fn whole_minutes(self) -> i64
pub const fn whole_minutes(self) -> i64
Sourcepub const fn whole_seconds(self) -> i64
pub const fn whole_seconds(self) -> i64
Sourcepub fn as_seconds_f64(self) -> f64
pub fn as_seconds_f64(self) -> f64
Sourcepub fn as_seconds_f32(self) -> f32
pub fn as_seconds_f32(self) -> f32
Sourcepub const fn whole_milliseconds(self) -> i128
pub const fn whole_milliseconds(self) -> i128
Sourcepub const fn subsec_milliseconds(self) -> i16
pub const fn subsec_milliseconds(self) -> i16
Sourcepub const fn whole_microseconds(self) -> i128
pub const fn whole_microseconds(self) -> i128
Sourcepub const fn subsec_microseconds(self) -> i32
pub const fn subsec_microseconds(self) -> i32
Sourcepub const fn whole_nanoseconds(self) -> i128
pub const fn whole_nanoseconds(self) -> i128
Sourcepub const fn subsec_nanoseconds(self) -> i32
pub const fn subsec_nanoseconds(self) -> i32
Sourcepub const fn checked_add(self, rhs: Self) -> Option<Self>
pub const fn checked_add(self, rhs: Self) -> Option<Self>
Sourcepub const fn checked_sub(self, rhs: Self) -> Option<Self>
pub const fn checked_sub(self, rhs: Self) -> Option<Self>
Sourcepub const fn checked_mul(self, rhs: i32) -> Option<Self>
pub const fn checked_mul(self, rhs: i32) -> Option<Self>
Computes self * rhs
, returning None
if an overflow occurred.
Sourcepub const fn checked_div(self, rhs: i32) -> Option<Self>
pub const fn checked_div(self, rhs: i32) -> Option<Self>
Sourcepub const fn checked_neg(self) -> Option<Self>
pub const fn checked_neg(self) -> Option<Self>
Sourcepub const fn saturating_add(self, rhs: Self) -> Self
pub const fn saturating_add(self, rhs: Self) -> Self
Computes self + rhs
, saturating if an overflow occurred.
Sourcepub const fn saturating_sub(self, rhs: Self) -> Self
pub const fn saturating_sub(self, rhs: Self) -> Self
Computes self - rhs
, saturating if an overflow occurred.
Sourcepub const fn saturating_mul(self, rhs: i32) -> Self
pub const fn saturating_mul(self, rhs: i32) -> Self
Computes self * rhs
, saturating if an overflow occurred.
assert_eq!(5.seconds().saturating_mul(2), 10.seconds());
assert_eq!(5.seconds().saturating_mul(-2), (-10).seconds());
assert_eq!(5.seconds().saturating_mul(0), Duration::ZERO);
assert_eq!(Duration::MAX.saturating_mul(2), Duration::MAX);
assert_eq!(Duration::MIN.saturating_mul(2), Duration::MIN);
assert_eq!(Duration::MAX.saturating_mul(-2), Duration::MIN);
assert_eq!(Duration::MIN.saturating_mul(-2), Duration::MAX);
Trait Implementations§
Source§impl Add<Duration> for OffsetDateTime
impl Add<Duration> for OffsetDateTime
Source§impl Add<Duration> for PrimitiveDateTime
impl Add<Duration> for PrimitiveDateTime
Source§impl Add<Duration> for SystemTime
impl Add<Duration> for SystemTime
Source§impl Add<Duration> for Time
impl Add<Duration> for Time
Source§impl AddAssign<Duration> for Date
impl AddAssign<Duration> for Date
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moreSource§impl AddAssign<Duration> for Duration
impl AddAssign<Duration> for Duration
Source§fn add_assign(&mut self, rhs: StdDuration)
fn add_assign(&mut self, rhs: StdDuration)
+=
operation. Read moreSource§impl AddAssign<Duration> for Duration
impl AddAssign<Duration> for Duration
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
§Panics
This may panic if the resulting addition cannot be represented.
Source§impl AddAssign<Duration> for Instant
impl AddAssign<Duration> for Instant
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moreSource§impl AddAssign<Duration> for OffsetDateTime
impl AddAssign<Duration> for OffsetDateTime
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
§Panics
This may panic if an overflow occurs.
Source§impl AddAssign<Duration> for PrimitiveDateTime
impl AddAssign<Duration> for PrimitiveDateTime
Source§fn add_assign(&mut self, duration: Duration)
fn add_assign(&mut self, duration: Duration)
§Panics
This may panic if an overflow occurs.
Source§impl AddAssign<Duration> for SystemTime
impl AddAssign<Duration> for SystemTime
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moreSource§impl AddAssign<Duration> for Time
impl AddAssign<Duration> for Time
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moreSource§impl AddAssign for Duration
impl AddAssign for Duration
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+=
operation. Read moreSource§impl<'a> Deserialize<'a> for Duration
impl<'a> Deserialize<'a> for Duration
Source§fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
Source§impl Display for Duration
impl Display for Duration
The format returned by this implementation is not stable and must not be relied upon.
By default this produces an exact, full-precision printout of the duration.
For a concise, rounded printout instead, you can use the .N
format specifier:
For the purposes of this implementation, a day is exactly 24 hours and a minute is exactly 60 seconds.
Source§impl DivAssign<f32> for Duration
impl DivAssign<f32> for Duration
Source§fn div_assign(&mut self, rhs: f32)
fn div_assign(&mut self, rhs: f32)
/=
operation. Read moreSource§impl DivAssign<f64> for Duration
impl DivAssign<f64> for Duration
Source§fn div_assign(&mut self, rhs: f64)
fn div_assign(&mut self, rhs: f64)
/=
operation. Read moreSource§impl DivAssign<i16> for Duration
impl DivAssign<i16> for Duration
Source§fn div_assign(&mut self, rhs: i16)
fn div_assign(&mut self, rhs: i16)
/=
operation. Read moreSource§impl DivAssign<i32> for Duration
impl DivAssign<i32> for Duration
Source§fn div_assign(&mut self, rhs: i32)
fn div_assign(&mut self, rhs: i32)
/=
operation. Read moreSource§impl DivAssign<i8> for Duration
impl DivAssign<i8> for Duration
Source§fn div_assign(&mut self, rhs: i8)
fn div_assign(&mut self, rhs: i8)
/=
operation. Read moreSource§impl DivAssign<u16> for Duration
impl DivAssign<u16> for Duration
Source§fn div_assign(&mut self, rhs: u16)
fn div_assign(&mut self, rhs: u16)
/=
operation. Read moreSource§impl DivAssign<u32> for Duration
impl DivAssign<u32> for Duration
Source§fn div_assign(&mut self, rhs: u32)
fn div_assign(&mut self, rhs: u32)
/=
operation. Read moreSource§impl DivAssign<u8> for Duration
impl DivAssign<u8> for Duration
Source§fn div_assign(&mut self, rhs: u8)
fn div_assign(&mut self, rhs: u8)
/=
operation. Read moreSource§impl MulAssign<f32> for Duration
impl MulAssign<f32> for Duration
Source§fn mul_assign(&mut self, rhs: f32)
fn mul_assign(&mut self, rhs: f32)
*=
operation. Read moreSource§impl MulAssign<f64> for Duration
impl MulAssign<f64> for Duration
Source§fn mul_assign(&mut self, rhs: f64)
fn mul_assign(&mut self, rhs: f64)
*=
operation. Read moreSource§impl MulAssign<i16> for Duration
impl MulAssign<i16> for Duration
Source§fn mul_assign(&mut self, rhs: i16)
fn mul_assign(&mut self, rhs: i16)
*=
operation. Read moreSource§impl MulAssign<i32> for Duration
impl MulAssign<i32> for Duration
Source§fn mul_assign(&mut self, rhs: i32)
fn mul_assign(&mut self, rhs: i32)
*=
operation. Read moreSource§impl MulAssign<i8> for Duration
impl MulAssign<i8> for Duration
Source§fn mul_assign(&mut self, rhs: i8)
fn mul_assign(&mut self, rhs: i8)
*=
operation. Read moreSource§impl MulAssign<u16> for Duration
impl MulAssign<u16> for Duration
Source§fn mul_assign(&mut self, rhs: u16)
fn mul_assign(&mut self, rhs: u16)
*=
operation. Read moreSource§impl MulAssign<u32> for Duration
impl MulAssign<u32> for Duration
Source§fn mul_assign(&mut self, rhs: u32)
fn mul_assign(&mut self, rhs: u32)
*=
operation. Read moreSource§impl MulAssign<u8> for Duration
impl MulAssign<u8> for Duration
Source§fn mul_assign(&mut self, rhs: u8)
fn mul_assign(&mut self, rhs: u8)
*=
operation. Read moreSource§impl Ord for Duration
impl Ord for Duration
Source§impl PartialOrd<Duration> for Duration
impl PartialOrd<Duration> for Duration
Source§impl PartialOrd<Duration> for Duration
impl PartialOrd<Duration> for Duration
Source§impl PartialOrd for Duration
impl PartialOrd for Duration
Source§impl Sub<Duration> for OffsetDateTime
impl Sub<Duration> for OffsetDateTime
Source§impl Sub<Duration> for PrimitiveDateTime
impl Sub<Duration> for PrimitiveDateTime
Source§impl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
Source§impl Sub<Duration> for Time
impl Sub<Duration> for Time
Source§impl SubAssign<Duration> for Date
impl SubAssign<Duration> for Date
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moreSource§impl SubAssign<Duration> for Duration
impl SubAssign<Duration> for Duration
Source§fn sub_assign(&mut self, rhs: StdDuration)
fn sub_assign(&mut self, rhs: StdDuration)
-=
operation. Read moreSource§impl SubAssign<Duration> for Duration
impl SubAssign<Duration> for Duration
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
§Panics
This may panic if the resulting subtraction can not be represented.
Source§impl SubAssign<Duration> for Instant
impl SubAssign<Duration> for Instant
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moreSource§impl SubAssign<Duration> for OffsetDateTime
impl SubAssign<Duration> for OffsetDateTime
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
§Panics
This may panic if an overflow occurs.
Source§impl SubAssign<Duration> for PrimitiveDateTime
impl SubAssign<Duration> for PrimitiveDateTime
Source§fn sub_assign(&mut self, duration: Duration)
fn sub_assign(&mut self, duration: Duration)
§Panics
This may panic if an overflow occurs.
Source§impl SubAssign<Duration> for SystemTime
impl SubAssign<Duration> for SystemTime
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moreSource§impl SubAssign<Duration> for Time
impl SubAssign<Duration> for Time
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moreSource§impl SubAssign for Duration
impl SubAssign for Duration
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-=
operation. Read more