From 40800ce88492d7aa8c0baf1f0924fb0ba3f9ee04 Mon Sep 17 00:00:00 2001 From: Pavel Pscheidl Date: Sun, 18 Sep 2022 15:45:35 +0200 Subject: [PATCH] refactor: Use checked substitution & convert u32 conversiont to None on err --- src/naive/datetime/mod.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/naive/datetime/mod.rs b/src/naive/datetime/mod.rs index c0f0def5c1..133c3cfc6c 100644 --- a/src/naive/datetime/mod.rs +++ b/src/naive/datetime/mod.rs @@ -158,10 +158,13 @@ impl NaiveDateTime { let secs = millis / 1000; if millis < 0 { - let nsecs = (millis % 1000).abs() as u32 * NANOS_IN_MILLISECOND; - NaiveDateTime::from_timestamp_opt(secs - 1, NANOS_IN_SECOND - nsecs) + let nsecs = u32::try_from((millis % 1000).abs()).ok()? * NANOS_IN_MILLISECOND; + NaiveDateTime::from_timestamp_opt( + secs.checked_sub(1)?, + NANOS_IN_SECOND.checked_sub(nsecs)?, + ) } else { - let nsecs = (millis % 1000) as u32 * NANOS_IN_MILLISECOND; + let nsecs = u32::try_from(millis % 1000).ok()? * NANOS_IN_MILLISECOND; NaiveDateTime::from_timestamp_opt(secs, nsecs) } }