Как в java String.format() изменить формат времени 24:00:00 на 0:00:00?

Дано количество секунд int seconds, которое вводится с консоли. Надо вывести в консоль текущее время в формате h:mm:ss (possible values: [0:00:00; 23:59:59]). Как можно изменить формат времени с 24:00:00 на 0:00:00?

public class ElectronicWatch {
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int seconds = scanner.nextInt();
        ZonedDateTime nowZoned = ZonedDateTime.now();
        Instant midnight = nowZoned.toLocalDate().atStartOfDay(nowZoned.getZone()).toInstant();
        Instant currentTime = midnight.plus(seconds, ChronoUnit.SECONDS);
        Duration duration = Duration.between(midnight, currentTime);
        String hms = String.format("%d:%02d:%02d",
                duration.toHours(),
                duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println(hms);
    }
}

Expected :0:00:00 Actual :24:00:00

Три теста не проходят только из-за формата времени:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;


class ElectronicWatchTest {

    @ParameterizedTest
    @MethodSource("testCases")
    void test(int input, String expected) {

        String inputText = Integer.toString(input);

        final ByteArrayInputStream controlledIn = new ByteArrayInputStream(inputText.getBytes(StandardCharsets.UTF_8));
        InputStream defaultIn = System.in;

        final ByteArrayOutputStream sink = new ByteArrayOutputStream();
        PrintStream controlledOut = new PrintStream(sink);
        PrintStream defaultOut = System.out;

        try {
            System.setIn(controlledIn);
            System.setOut(controlledOut);

            ElectronicWatch.main(new String[]{});

            controlledOut.flush();
            assertEquals(expected, sink.toString().trim(), "Error on input value: " + input);
        } finally {
            System.setIn(defaultIn);
            System.setOut(defaultOut);
        }
    }

    static Stream<Arguments> testCases() {
        return Stream.of(
                Arguments.of(60, "0:01:00"),
                Arguments.of(3599, "0:59:59"),
                Arguments.of(86229, "23:57:09"),
                Arguments.of(86400, "0:00:00"),
                Arguments.of(89999, "0:59:59"),
                Arguments.of(86460, "0:01:00"),
                Arguments.of(1, "0:00:01"),
                Arguments.of(10, "0:00:10"),
                Arguments.of(11, "0:00:11"),
                Arguments.of(70, "0:01:10"),
                Arguments.of(71, "0:01:11"),
                Arguments.of(3601, "1:00:01")
        );
    }
}

Ответы (0 шт):