diff --git a/src/conversions/jiff.rs b/src/conversions/jiff.rs index 593811f7641..9d2211431cc 100644 --- a/src/conversions/jiff.rs +++ b/src/conversions/jiff.rs @@ -68,6 +68,9 @@ fn datetime_to_pydatetime<'py>( fold: bool, timezone: Option<&TimeZone>, ) -> PyResult> { + let micros = datetime.subsec_nanosecond() / 1000; + // SAFETY: `subsec_nanosecond()` [0, 999_999_999], after / 1000 always non-negative + unsafe { core::hint::assert_unchecked(micros >= 0) }; PyDateTime::new_with_fold( py, datetime.year().into(), @@ -76,7 +79,7 @@ fn datetime_to_pydatetime<'py>( datetime.hour().try_into()?, datetime.minute().try_into()?, datetime.second().try_into()?, - (datetime.subsec_nanosecond() / 1000).try_into()?, + micros as u32, timezone .map(|tz| tz.into_pyobject(py)) .transpose()? @@ -87,10 +90,17 @@ fn datetime_to_pydatetime<'py>( #[cfg(not(Py_LIMITED_API))] fn pytime_to_time(time: &impl PyTimeAccess) -> PyResult