Struct DateTimeRound
pub struct DateTimeRound { /* private fields */ }
Options for DateTime::round.
This type provides a way to configure the rounding of a civil datetime. In
particular, DateTime::round accepts anything that implements the
Into<DateTimeRound> trait. There are some trait implementations that
therefore make calling DateTime::round in some common cases more
ergonomic:
From<Unit> for DateTimeRoundwill construct a rounding configuration that rounds to the unit given. Specifically,DateTimeRound::new().smallest(unit).From<(Unit, i64)> for DateTimeRoundis like the one above, but also specifies the rounding increment forDateTimeRound::increment.
Note that in the default configuration, no rounding occurs.
Example
This example shows how to round a datetime to the nearest second:
use ;
let dt: DateTime = "2024-06-20 16:24:59.5".parse?;
assert_eq!;
# Ok::
The above makes use of the fact that Unit implements
Into<DateTimeRound>. If you want to change the rounding mode to, say,
truncation, then you'll need to construct a DateTimeRound explicitly
since there are no convenience Into trait implementations for
RoundMode.
use ;
let dt: DateTime = "2024-06-20 16:24:59.5".parse?;
assert_eq!;
# Ok::
Implementations
impl DateTimeRound
fn new() -> DateTimeRoundCreate a new default configuration for rounding a
DateTime.fn smallest(self, unit: Unit) -> DateTimeRoundSet the smallest units allowed in the datetime 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
2024-06-20T03: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::Day. And when the smallest unit isUnit::Day, the rounding increment must be equal to1. Otherwise an error will be returned fromDateTime::round.Example
use ; let dt = date.at; assert_eq!; // Or, utilize the `From<Unit> for DateTimeRound` impl: assert_eq!; # Ok::fn mode(self, mode: RoundMode) -> DateTimeRoundSet 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 datetimes up towards positive infinity.
use ; let dt: DateTime = "2024-06-20 03:25:01".parse?; assert_eq!; # Ok::fn increment(self, increment: i64) -> DateTimeRoundSet 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
When the smallest unit is
Unit::Day, then the rounding increment must be1or elseDateTime::roundwill return an error.For other units, 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).In all cases, the increment must be greater than zero and less than or equal to
1_000_000_000.Example
This example shows how to round a datetime to the nearest 10 minute increment.
use ; let dt: DateTime = "2024-06-20 03:24:59".parse?; assert_eq!; # Ok::
Trait Implementations
impl Clone for DateTimeRound
fn clone(&self) -> DateTimeRound
impl Copy for DateTimeRound
impl Debug for DateTimeRound
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl Default for DateTimeRound
fn default() -> DateTimeRound
impl From<(Unit, i64)> for DateTimeRound
fn from((unit, increment): (Unit, i64)) -> DateTimeRound
impl From<Unit> for DateTimeRound
fn from(unit: Unit) -> DateTimeRound
Auto Trait Implementations
impl Freeze for DateTimeRound
impl RefUnwindSafe for DateTimeRound
impl Send for DateTimeRound
impl Sync for DateTimeRound
impl Unpin for DateTimeRound
impl UnsafeUnpin for DateTimeRound
impl UnwindSafe for DateTimeRound
Blanket Implementations
impl<T> Any for DateTimeRound
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for DateTimeRound
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for DateTimeRound
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for DateTimeRound
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for DateTimeRound
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for DateTimeRound
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for DateTimeRound
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for DateTimeRound
where
U: Into<T>,
type Error = Infallible;fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for DateTimeRound
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>