Struct ZonedRound
pub struct ZonedRound { /* private fields */ }
Options for Zoned::round.
This type provides a way to configure the rounding of a zoned datetime. In
particular, Zoned::round accepts anything that implements the
Into<ZonedRound> trait. There are some trait implementations that
therefore make calling Zoned::round in some common cases more
ergonomic:
From<Unit> for ZonedRoundwill construct a rounding configuration that rounds to the unit given. Specifically,ZonedRound::new().smallest(unit).From<(Unit, i64)> for ZonedRoundis like the one above, but also specifies the rounding increment forZonedRound::increment.
Note that in the default configuration, no rounding occurs.
Example
This example shows how to round a zoned datetime to the nearest second:
use ;
let zdt: Zoned = "2024-06-20 16:24:59.5[America/New_York]".parse?;
assert_eq!;
# Ok::
The above makes use of the fact that Unit implements
Into<ZonedRound>. If you want to change the rounding mode to, say,
truncation, then you'll need to construct a ZonedRound explicitly
since there are no convenience Into trait implementations for
RoundMode.
use ;
let zdt: Zoned = "2024-06-20 16:24:59.5[America/New_York]".parse?;
assert_eq!;
# Ok::
Implementations
impl ZonedRound
fn new() -> ZonedRoundCreate a new default configuration for rounding a
Zoned.fn smallest(self, unit: Unit) -> ZonedRoundSet the smallest units allowed in the zoned 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:30[America/New_York]to 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 fromZoned::round.Example
use ; let zdt = date.at.in_tz?; assert_eq!; // Or, utilize the `From<Unit> for ZonedRound` impl: assert_eq!; # Ok::fn mode(self, mode: RoundMode) -> ZonedRoundSet 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 zoned datetimes up towards positive infinity.
use ; let zdt: Zoned = "2024-06-20 03:25:01[America/New_York]".parse?; assert_eq!; # Ok::fn increment(self, increment: i64) -> ZonedRoundSet 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 elseZoned::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 zoned datetime to the nearest 10 minute increment.
use ; let zdt: Zoned = "2024-06-20 03:24:59[America/New_York]".parse?; assert_eq!; # Ok::
Trait Implementations
impl Clone for ZonedRound
fn clone(&self) -> Self
impl Copy for ZonedRound
impl Debug for ZonedRound
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl Default for ZonedRound
fn default() -> ZonedRound
impl From<(Unit, i64)> for ZonedRound
fn from((unit, increment): (Unit, i64)) -> ZonedRound
impl From<Unit> for ZonedRound
fn from(unit: Unit) -> ZonedRound
Auto Trait Implementations
impl Freeze for ZonedRound
impl RefUnwindSafe for ZonedRound
impl Send for ZonedRound
impl Sync for ZonedRound
impl Unpin for ZonedRound
impl UnsafeUnpin for ZonedRound
impl UnwindSafe for ZonedRound
Blanket Implementations
impl<T> Any for ZonedRound
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for ZonedRound
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for ZonedRound
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for ZonedRound
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for ZonedRound
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for ZonedRound
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for ZonedRound
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 ZonedRound
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for ZonedRound
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>