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;