Struct TimestampRound
pub struct TimestampRound { /* private fields */ }
Options for Timestamp::round.
This type provides a way to configure the rounding of a timestamp. In
particular, Timestamp::round accepts anything that implements the
Into<TimestampRound> trait. There are some trait implementations that
therefore make calling Timestamp::round in some common cases more
ergonomic:
From<Unit> for TimestampRoundwill construct a rounding configuration that rounds to the unit given. Specifically,TimestampRound::new().smallest(unit).From<(Unit, i64)> for TimestampRoundis like the one above, but also specifies the rounding increment forTimestampRound::increment.
Note that in the default configuration, no rounding occurs.
Example
This example shows how to round a timestamp to the nearest second:
use ;
let ts: Timestamp = "2024-06-20 16:24:59.5Z".parse?;
assert_eq!;
# Ok::
The above makes use of the fact that Unit implements
Into<TimestampRound>. If you want to change the rounding mode to, say,
truncation, then you'll need to construct a TimestampRound explicitly
since there are no convenience Into trait implementations for
RoundMode.
use ;
let ts: Timestamp = "2024-06-20 16:24:59.5Z".parse?;
assert_eq!;
# Ok::
Implementations
impl TimestampRound
fn new() -> TimestampRoundCreate a new default configuration for rounding a
Timestamp.fn smallest(self, unit: Unit) -> TimestampRoundSet the smallest units allowed in the timestamp 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:30Zto 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 ts: Timestamp = "2024-06-20T03:25:30Z".parse?; assert_eq!; // Or, utilize the `From<Unit> for TimestampRound` impl: assert_eq!; # Ok::fn mode(self, mode: RoundMode) -> TimestampRoundSet 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 timestamps up towards positive infinity.
use ; let ts: Timestamp = "2024-06-20 03:25:01Z".parse?; assert_eq!; # Ok::fn increment(self, increment: i64) -> TimestampRoundSet 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, when combined with the smallest unit (which defaults to
Unit::Nanosecond), must divide evenly into86,400seconds (one 24-hour civil day). For example, increments of both 45 seconds and 15 minutes are allowed, but 7 seconds and 25 minutes are both not allowed.In all cases, the increment must be greater than zero and less than or equal to
1_000_000_000. Note that this means, for example, one cannot round to the nearest43_200_000_000_000nanosecond, despite the fact that it divides evenly into86_400_000_000_000seconds.Example
This example shows how to round a timestamp to the nearest 10 minute increment.
use ; let ts: Timestamp = "2024-06-20 03:24:59Z".parse?; assert_eq!; # Ok::
Trait Implementations
impl Clone for TimestampRound
fn clone(&self) -> Self
impl Copy for TimestampRound
impl Debug for TimestampRound
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl Default for TimestampRound
fn default() -> TimestampRound
impl From<(Unit, i64)> for TimestampRound
fn from((unit, increment): (Unit, i64)) -> TimestampRound
impl From<Unit> for TimestampRound
fn from(unit: Unit) -> TimestampRound
Auto Trait Implementations
impl Freeze for TimestampRound
impl RefUnwindSafe for TimestampRound
impl Send for TimestampRound
impl Sync for TimestampRound
impl Unpin for TimestampRound
impl UnsafeUnpin for TimestampRound
impl UnwindSafe for TimestampRound
Blanket Implementations
impl<T> Any for TimestampRound
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for TimestampRound
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for TimestampRound
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for TimestampRound
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for TimestampRound
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for TimestampRound
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for TimestampRound
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 TimestampRound
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for TimestampRound
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>