Trait product_os_async_executor::DurationRound

source ·
pub trait DurationRound: Sized {
    type Err: Error;

    // Required methods
    fn duration_round(self, duration: TimeDelta) -> Result<Self, Self::Err>;
    fn duration_trunc(self, duration: TimeDelta) -> Result<Self, Self::Err>;
}
Expand description

Extension trait for rounding or truncating a DateTime by a TimeDelta.

§Limitations

Both rounding and truncating are done via TimeDelta::num_nanoseconds and DateTime::timestamp_nanos_opt. This means that they will fail if either the TimeDelta or the DateTime are too big to represented as nanoseconds. They will also fail if the TimeDelta is bigger than the timestamp, negative or zero.

Required Associated Types§

source

type Err: Error

Error that can occur in rounding or truncating

Required Methods§

source

fn duration_round(self, duration: TimeDelta) -> Result<Self, Self::Err>

Return a copy rounded by TimeDelta.

§Example
let dt = NaiveDate::from_ymd_opt(2018, 1, 11)
    .unwrap()
    .and_hms_milli_opt(12, 0, 0, 154)
    .unwrap()
    .and_utc();
assert_eq!(
    dt.duration_round(TimeDelta::try_milliseconds(10).unwrap()).unwrap().to_string(),
    "2018-01-11 12:00:00.150 UTC"
);
assert_eq!(
    dt.duration_round(TimeDelta::try_days(1).unwrap()).unwrap().to_string(),
    "2018-01-12 00:00:00 UTC"
);
source

fn duration_trunc(self, duration: TimeDelta) -> Result<Self, Self::Err>

Return a copy truncated by TimeDelta.

§Example
let dt = NaiveDate::from_ymd_opt(2018, 1, 11)
    .unwrap()
    .and_hms_milli_opt(12, 0, 0, 154)
    .unwrap()
    .and_utc();
assert_eq!(
    dt.duration_trunc(TimeDelta::try_milliseconds(10).unwrap()).unwrap().to_string(),
    "2018-01-11 12:00:00.150 UTC"
);
assert_eq!(
    dt.duration_trunc(TimeDelta::try_days(1).unwrap()).unwrap().to_string(),
    "2018-01-11 00:00:00 UTC"
);

Object Safety§

This trait is not object safe.

Implementors§