diff --git a/src/datetime/mod.rs b/src/datetime/mod.rs index 24a344d9ab..b26296823e 100644 --- a/src/datetime/mod.rs +++ b/src/datetime/mod.rs @@ -622,6 +622,14 @@ impl DateTime { NaiveDateTime::from_timestamp_opt(secs, nsecs).as_ref().map(NaiveDateTime::and_utc) } + // FIXME: remove when our MSRV is 1.61+ + // This method is used by `NaiveDateTime::and_utc` because `DateTime::from_naive_utc_and_offset` + // can't be made const yet. + // Trait bounds in const function / implementation blocks were not supported until 1.61. + pub(crate) const fn from_naive_utc(datetime: NaiveDateTime) -> Self { + DateTime { datetime, offset: Utc } + } + /// The Unix Epoch, 1970-01-01 00:00:00 UTC. pub const UNIX_EPOCH: Self = Self { datetime: NaiveDateTime::UNIX_EPOCH, offset: Utc }; } diff --git a/src/naive/datetime/mod.rs b/src/naive/datetime/mod.rs index 6be8c88ce5..88d780a4c1 100644 --- a/src/naive/datetime/mod.rs +++ b/src/naive/datetime/mod.rs @@ -1030,8 +1030,9 @@ impl NaiveDateTime { /// assert_eq!(dt.timezone(), Utc); /// ``` #[must_use] - pub fn and_utc(&self) -> DateTime { - Utc.from_utc_datetime(self) + pub const fn and_utc(&self) -> DateTime { + // FIXME: use `DateTime::from_naive_utc_and_offset` when our MSRV is 1.61+. + DateTime::from_naive_utc(*self) } /// The minimum possible `NaiveDateTime`.