Struct DateTimeRound
struct DateTimeRound { ... }
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: 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: 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: 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).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::
impl Clone for DateTimeRound
fn clone(self: &Self) -> DateTimeRound
impl Copy for DateTimeRound
impl Debug for DateTimeRound
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Default for DateTimeRound
fn default() -> DateTimeRound
impl Freeze for DateTimeRound
impl From for DateTimeRound
fn from(unit: Unit) -> DateTimeRound
impl From for DateTimeRound
fn from((unit, increment): (Unit, i64)) -> 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
impl<T> Any for DateTimeRound
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for DateTimeRound
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for DateTimeRound
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for DateTimeRound
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for DateTimeRound
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for DateTimeRound
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for DateTimeRound
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 DateTimeRound
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for DateTimeRound
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>