From 741e25db0dabe51be90e66512de530e74fd1be7b Mon Sep 17 00:00:00 2001 From: Daniel Bergman Date: Sat, 28 Jun 2025 18:28:57 +0200 Subject: [PATCH] Handle hour overflow --- watch-faces/complication/sunrise_sunset_face.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/watch-faces/complication/sunrise_sunset_face.c b/watch-faces/complication/sunrise_sunset_face.c index d5e7a052..2caefa64 100644 --- a/watch-faces/complication/sunrise_sunset_face.c +++ b/watch-faces/complication/sunrise_sunset_face.c @@ -127,6 +127,15 @@ static void _sunrise_sunset_face_update(sunrise_sunset_state_t *state) { if (seconds < 30) scratch_time.unit.minute = floor(minutes); else scratch_time.unit.minute = ceil(minutes); + // Handle hour overflow from timezone conversion + while (scratch_time.unit.hour >= 24) { + scratch_time.unit.hour -= 24; + // Increment day (this will be handled by the date arithmetic) + uint32_t timestamp = watch_utility_date_time_to_unix_time(scratch_time, 0); + timestamp += 86400; + scratch_time = watch_utility_date_time_from_unix_time(timestamp, 0); + } + if (scratch_time.unit.minute == 60) { scratch_time.unit.minute = 0; scratch_time.unit.hour = (scratch_time.unit.hour + 1) % 24; @@ -157,6 +166,15 @@ static void _sunrise_sunset_face_update(sunrise_sunset_state_t *state) { if (seconds < 30) scratch_time.unit.minute = floor(minutes); else scratch_time.unit.minute = ceil(minutes); + // Handle hour overflow from timezone conversion + while (scratch_time.unit.hour >= 24) { + scratch_time.unit.hour -= 24; + // Increment day (this will be handled by the date arithmetic) + uint32_t timestamp = watch_utility_date_time_to_unix_time(scratch_time, 0); + timestamp += 86400; + scratch_time = watch_utility_date_time_from_unix_time(timestamp, 0); + } + if (scratch_time.unit.minute == 60) { scratch_time.unit.minute = 0; scratch_time.unit.hour = (scratch_time.unit.hour + 1) % 24;