Struct time::Duration [−][src]
pub struct Duration { /* fields omitted */ }
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.
Duration
implements many traits, including Add
, Sub
, Mul
, and
Div
, among others.
This implementation allows for negative durations, unlike
core::time::Duration
.
Implementations
Equivalent to 0.seconds()
.
assert_eq!(Duration::zero(), 0.seconds());
Equivalent to 1.nanoseconds()
.
assert_eq!(Duration::nanosecond(), 1.nanoseconds());
Equivalent to 1.microseconds()
.
assert_eq!(Duration::microsecond(), 1.microseconds());
Equivalent to 1.milliseconds()
.
assert_eq!(Duration::millisecond(), 1.milliseconds());
Equivalent to 1.seconds()
.
assert_eq!(Duration::second(), 1.seconds());
Equivalent to 1.minutes()
.
assert_eq!(Duration::minute(), 1.minutes());
The maximum possible duration. Adding any positive duration to this will cause an overflow.
The value returned by this method may change at any time.
The minimum possible duration. Adding any negative duration to this will cause an overflow.
The value returned by this method may change at any time.
Check if a duration is exactly zero.
assert!(0.seconds().is_zero());
assert!(!1.nanoseconds().is_zero());
Check if a duration is negative.
assert!((-1).seconds().is_negative());
assert!(!0.seconds().is_negative());
assert!(!1.seconds().is_negative());
Check if a duration is positive.
assert!(1.seconds().is_positive());
assert!(!0.seconds().is_positive());
assert!(!(-1).seconds().is_positive());
👎 Deprecated since 0.2.7: To obtain the sign of a Duration
, you should use the is_positive
, is_negative
, and is_zero
methods.
To obtain the sign of a Duration
, you should use the is_positive
, is_negative
, and is_zero
methods.
Get the sign of the duration.
assert_eq!(1.seconds().sign(), Sign::Positive);
assert_eq!((-1).seconds().sign(), Sign::Negative);
assert_eq!(0.seconds().sign(), Sign::Zero);
Get the absolute value of the duration.
assert_eq!(1.seconds().abs(), 1.seconds());
assert_eq!(0.seconds().abs(), 0.seconds());
assert_eq!((-1).seconds().abs(), 1.seconds());
This function is const fn
when using rustc >= 1.39.
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());
Create a new Duration
with the given number of weeks. Equivalent to
Duration::seconds(weeks * 604_800)
.
assert_eq!(Duration::weeks(1), 604_800.seconds());
Get the number of whole weeks in the duration.
assert_eq!(1.weeks().whole_weeks(), 1);
assert_eq!((-1).weeks().whole_weeks(), -1);
assert_eq!(6.days().whole_weeks(), 0);
assert_eq!((-6).days().whole_weeks(), 0);
Create a new Duration
with the given number of days. Equivalent to
Duration::seconds(days * 86_400)
.
assert_eq!(Duration::days(1), 86_400.seconds());
Get the number of whole days in the duration.
assert_eq!(1.days().whole_days(), 1);
assert_eq!((-1).days().whole_days(), -1);
assert_eq!(23.hours().whole_days(), 0);
assert_eq!((-23).hours().whole_days(), 0);
Create a new Duration
with the given number of hours. Equivalent to
Duration::seconds(hours * 3_600)
.
assert_eq!(Duration::hours(1), 3_600.seconds());
Get the number of whole hours in the duration.
assert_eq!(1.hours().whole_hours(), 1);
assert_eq!((-1).hours().whole_hours(), -1);
assert_eq!(59.minutes().whole_hours(), 0);
assert_eq!((-59).minutes().whole_hours(), 0);
Create a new Duration
with the given number of minutes. Equivalent to
Duration::seconds(minutes * 60)
.
assert_eq!(Duration::minutes(1), 60.seconds());
Get the number of whole minutes in the duration.
assert_eq!(1.minutes().whole_minutes(), 1);
assert_eq!((-1).minutes().whole_minutes(), -1);
assert_eq!(59.seconds().whole_minutes(), 0);
assert_eq!((-59).seconds().whole_minutes(), 0);
Create a new Duration
with the given number of seconds.
assert_eq!(Duration::seconds(1), 1_000.milliseconds());
Get the number of whole seconds in the duration.
assert_eq!(1.seconds().whole_seconds(), 1);
assert_eq!((-1).seconds().whole_seconds(), -1);
assert_eq!(1.minutes().whole_seconds(), 60);
assert_eq!((-1).minutes().whole_seconds(), -60);
Creates a new Duration
from the specified number of seconds
represented as f64
.
assert_eq!(Duration::seconds_f64(0.5), 0.5.seconds());
assert_eq!(Duration::seconds_f64(-0.5), -0.5.seconds());
Get the number of fractional seconds in the duration.
assert_eq!(1.5.seconds().as_seconds_f64(), 1.5);
assert_eq!((-1.5).seconds().as_seconds_f64(), -1.5);
Creates a new Duration
from the specified number of seconds
represented as f32
.
assert_eq!(Duration::seconds_f32(0.5), 0.5.seconds());
assert_eq!(Duration::seconds_f32(-0.5), (-0.5).seconds());
Get the number of fractional seconds in the duration.
assert_eq!(1.5.seconds().as_seconds_f32(), 1.5);
assert_eq!((-1.5).seconds().as_seconds_f32(), -1.5);
Create a new Duration
with the given number of milliseconds.
assert_eq!(Duration::milliseconds(1), 1_000.microseconds());
assert_eq!(Duration::milliseconds(-1), (-1_000).microseconds());
Get the number of whole milliseconds in the duration.
assert_eq!(1.seconds().whole_milliseconds(), 1_000);
assert_eq!((-1).seconds().whole_milliseconds(), -1_000);
assert_eq!(1.milliseconds().whole_milliseconds(), 1);
assert_eq!((-1).milliseconds().whole_milliseconds(), -1);
Get the number of milliseconds past the number of whole seconds.
Always in the range -1_000..1_000
.
assert_eq!(1.4.seconds().subsec_milliseconds(), 400);
assert_eq!((-1.4).seconds().subsec_milliseconds(), -400);
Create a new Duration
with the given number of microseconds.
assert_eq!(Duration::microseconds(1), 1_000.nanoseconds());
assert_eq!(Duration::microseconds(-1), (-1_000).nanoseconds());
Get the number of whole microseconds in the duration.
assert_eq!(1.milliseconds().whole_microseconds(), 1_000);
assert_eq!((-1).milliseconds().whole_microseconds(), -1_000);
assert_eq!(1.microseconds().whole_microseconds(), 1);
assert_eq!((-1).microseconds().whole_microseconds(), -1);
Get the number of microseconds past the number of whole seconds.
Always in the range -1_000_000..1_000_000
.
assert_eq!(1.0004.seconds().subsec_microseconds(), 400);
assert_eq!((-1.0004).seconds().subsec_microseconds(), -400);
Create a new Duration
with the given number of nanoseconds.
assert_eq!(Duration::nanoseconds(1), 1.microseconds() / 1_000);
assert_eq!(Duration::nanoseconds(-1), (-1).microseconds() / 1_000);
Get the number of nanoseconds in the duration.
assert_eq!(1.microseconds().whole_nanoseconds(), 1_000);
assert_eq!((-1).microseconds().whole_nanoseconds(), -1_000);
assert_eq!(1.nanoseconds().whole_nanoseconds(), 1);
assert_eq!((-1).nanoseconds().whole_nanoseconds(), -1);
Get the number of nanoseconds past the number of whole seconds.
The returned value will always be in the range
-1_000_000_000..1_000_000_000
.
assert_eq!(1.000_000_400.seconds().subsec_nanoseconds(), 400);
assert_eq!((-1.000_000_400).seconds().subsec_nanoseconds(), -400);
Computes self + rhs
, returning None
if an overflow occurred.
assert_eq!(5.seconds().checked_add(5.seconds()), Some(10.seconds()));
assert_eq!(Duration::max_value().checked_add(1.nanoseconds()), None);
assert_eq!((-5).seconds().checked_add(5.seconds()), Some(0.seconds()));
Computes self - rhs
, returning None
if an overflow occurred.
assert_eq!(5.seconds().checked_sub(5.seconds()), Some(Duration::zero()));
assert_eq!(Duration::min_value().checked_sub(1.nanoseconds()), None);
assert_eq!(5.seconds().checked_sub(10.seconds()), Some((-5).seconds()));
Computes self * rhs
, returning None
if an overflow occurred.
assert_eq!(5.seconds().checked_mul(2), Some(10.seconds()));
assert_eq!(5.seconds().checked_mul(-2), Some((-10).seconds()));
assert_eq!(5.seconds().checked_mul(0), Some(0.seconds()));
assert_eq!(Duration::max_value().checked_mul(2), None);
assert_eq!(Duration::min_value().checked_mul(2), None);
Computes self / rhs
, returning None
if rhs == 0
.
assert_eq!(10.seconds().checked_div(2), Some(5.seconds()));
assert_eq!(10.seconds().checked_div(-2), Some((-5).seconds()));
assert_eq!(1.seconds().checked_div(0), None);
This function is const fn
when using rustc >= 1.46.
Functions that have been renamed or had signatures changed since v0.1. As such, they are deprecated.
Use the whole_weeks
function
Use the whole_days
function
Use the whole_hours
function
Use the whole_minutes
function
Use the whole_seconds
function
👎 Deprecated since 0.2.0: Use the whole_milliseconds
function. The value is clamped between i64::min_value()
and i64::max_value()
.
Use the whole_milliseconds
function. The value is clamped between i64::min_value()
and i64::max_value()
.
Duration::whole_milliseconds
returns an i128
, rather than
panicking on overflow. To avoid panicking, this method currently limits
the value to the range i64::min_value()..=i64::max_value()
.
👎 Deprecated since 0.2.0: Use the whole_microseconds
function
Use the whole_microseconds
function
Duration::whole_microseconds
returns an i128
rather than returning
None
on i64
overflow.
👎 Deprecated since 0.2.0: Use the whole_nanoseconds
function
Use the whole_nanoseconds
function
Duration::whole_nanoseconds
returns an i128
rather than returning
None
on i64
overflow.
Use the time_fn
function
Use Duration::try_from(value)
or value.try_into()
Use std::time::Duration::try_from(value)
or value.try_into()
Trait Implementations
Add the sub-day time of the Duration
to the Time
. Wraps on overflow.
assert_eq!(time!(12:00) + 2.hours(), time!(14:00));
assert_eq!(time!(0:00:01) + (-2).seconds(), time!(23:59:59));
type Output = Self
type Output = Self
The resulting type after applying the +
operator.
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Add the sub-day time of the Duration
to the existing Time
. Wraps on
overflow.
let mut time = time!(12:00);
time += 2.hours();
assert_eq!(time, time!(14:00));
let mut time = time!(0:00:01);
time += (-2).seconds();
assert_eq!(time, time!(23:59:59));
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Subtract the sub-day time of the Duration
from the Time
. Wraps on
overflow.
assert_eq!(
time!(14:00) - 2.hours(),
time!(12:00)
);
assert_eq!(
time!(23:59:59) - (-2).seconds(),
time!(0:00:01)
);
type Output = Self
type Output = Self
The resulting type after applying the -
operator.
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Subtract the sub-day time of the Duration
from the existing Time
.
Wraps on overflow.
let mut time = time!(14:00);
time -= 2.hours();
assert_eq!(time, time!(12:00));
let mut time = time!(23:59:59);
time -= (-2).seconds();
assert_eq!(time, time!(0:00:01));
type Error = ConversionRange
type Error = ConversionRange
The type returned in the event of a conversion error.
Performs the conversion.
type Error = ConversionRange
type Error = ConversionRange
The type returned in the event of a conversion error.
Performs the conversion.
Auto Trait Implementations
impl RefUnwindSafe for Duration
impl UnwindSafe for Duration
Blanket Implementations
Mutably borrows from an owned value. Read more