pub trait DurationRound: Sized {
    type Err: Debug + Display;

    fn duration_round(self, duration: Duration) -> Result<Self, Self::Err>;
    fn duration_trunc(self, duration: Duration) -> Result<Self, Self::Err>;
}
Expand description

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

Limitations

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

Required Associated Types

Error that can occur in rounding or truncating

Required Methods

Return a copy rounded by Duration.

Example
let dt = NaiveDate::from_ymd_opt(2018, 1, 11).unwrap().and_hms_milli_opt(12, 0, 0, 154).unwrap().and_local_timezone(Utc).unwrap();
assert_eq!(
    dt.duration_round(Duration::milliseconds(10)).unwrap().to_string(),
    "2018-01-11 12:00:00.150 UTC"
);
assert_eq!(
    dt.duration_round(Duration::days(1)).unwrap().to_string(),
    "2018-01-12 00:00:00 UTC"
);

Return a copy truncated by Duration.

Example
let dt = NaiveDate::from_ymd_opt(2018, 1, 11).unwrap().and_hms_milli_opt(12, 0, 0, 154).unwrap().and_local_timezone(Utc).unwrap();
assert_eq!(
    dt.duration_trunc(Duration::milliseconds(10)).unwrap().to_string(),
    "2018-01-11 12:00:00.150 UTC"
);
assert_eq!(
    dt.duration_trunc(Duration::days(1)).unwrap().to_string(),
    "2018-01-11 00:00:00 UTC"
);

Implementors