Struct TimeRound
struct TimeRound { ... }
Options for Time::round.
This type provides a way to configure the rounding of a civil time.
In particular, Time::round accepts anything that implements the
Into<TimeRound> trait. There are some trait implementations that
therefore make calling Time::round in some common cases more ergonomic:
From<Unit> for TimeRoundwill construct a rounding configuration that rounds to the unit given. Specifically,TimeRound::new().smallest(unit).From<(Unit, i64)> for TimeRoundis like the one above, but also specifies the rounding increment forTimeRound::increment.
Note that in the default configuration, no rounding occurs.
Example
This example shows how to round a time to the nearest second:
use ;
let t: Time = "16:24:59.5".parse?;
assert_eq!;
# Ok::
The above makes use of the fact that Unit implements
Into<TimeRound>. If you want to change the rounding mode to, say,
truncation, then you'll need to construct a TimeRound explicitly
since there are no convenience Into trait implementations for
RoundMode.
use ;
let t: Time = "2024-06-20 16:24:59.5".parse?;
assert_eq!;
# Ok::
Implementations
impl TimeRound
fn new() -> TimeRoundCreate a new default configuration for rounding a
Time.fn smallest(self: Self, unit: Unit) -> TimeRoundSet the smallest units allowed in the time returned after rounding.
Any units below the smallest configured unit will be used, along with the rounding increment and rounding mode, to determine the value of the smallest unit. For example, when rounding
03:25:30to the nearest minute, the30second unit will result in rounding the minute unit of25up to26and zeroing out everything below minutes.This defaults to
Unit::Nanosecond.Errors
The smallest units must be no greater than
Unit::Hour.Example
use ; let t = time; assert_eq!; // Or, utilize the `From<Unit> for TimeRound` impl: assert_eq!; # Ok::fn mode(self: Self, mode: RoundMode) -> TimeRoundSet the rounding mode.
This defaults to
RoundMode::HalfExpand, which rounds away from zero. It matches the kind of rounding you might have been taught in school.Example
This shows how to always round times up towards positive infinity.
use ; let t: Time = "03:25:01".parse?; assert_eq!; # Ok::fn increment(self: Self, increment: i64) -> TimeRoundSet the rounding increment for the smallest unit.
The default value is
1. Other values permit rounding the smallest unit to the nearest integer increment specified. For example, if the smallest unit is set toUnit::Minute, then a rounding increment of30would result in rounding in increments of a half hour. That is, the only minute value that could result would be0or30.Errors
The rounding increment must divide evenly into the next highest unit above the smallest unit set. The rounding increment must also not be equal to the next highest unit. For example, if the smallest unit is
Unit::Nanosecond, then some of the valid values for the rounding increment are1,2,4,5,100and500. Namely, any integer that divides evenly into1,000nanoseconds since there are1,000nanoseconds in the next highest unit (microseconds).Example
This example shows how to round a time to the nearest 10 minute increment.
use ; let t: Time = "03:24:59".parse?; assert_eq!; # Ok::
impl Clone for TimeRound
fn clone(self: &Self) -> TimeRound
impl Copy for TimeRound
impl Debug for TimeRound
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Default for TimeRound
fn default() -> TimeRound
impl Freeze for TimeRound
impl From for TimeRound
fn from((unit, increment): (Unit, i64)) -> TimeRound
impl From for TimeRound
fn from(unit: Unit) -> TimeRound
impl RefUnwindSafe for TimeRound
impl Send for TimeRound
impl Sync for TimeRound
impl Unpin for TimeRound
impl UnsafeUnpin for TimeRound
impl UnwindSafe for TimeRound
impl<T> Any for TimeRound
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for TimeRound
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for TimeRound
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for TimeRound
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for TimeRound
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for TimeRound
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for TimeRound
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 TimeRound
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for TimeRound
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>