Trait DurationRound

trait DurationRound: Sized

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.

Associated Types

type Err: TraitBound { trait_: Path { path: "std::error::Error", id: Id(253), args: None }, generic_params: [], modifier: None }

Error that can occur in rounding or truncating

Required Methods

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

Return a copy rounded by TimeDelta.

Example

# use chrono::{DurationRound, TimeDelta, NaiveDate};
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"
);
fn duration_trunc(self: Self, duration: TimeDelta) -> Result<Self, <Self as >::Err>

Return a copy truncated by TimeDelta.

Example

# use chrono::{DurationRound, TimeDelta, NaiveDate};
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"
);

Implementors