Diferencia de tiempo en Java [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo mido el tiempo transcurrido en Java? [duplicar] 15 respuestas

¿Por qué la salida del código Java a continuación es 04:18:23 y no 03:18:23?

public static void main(String[] args) {
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    try {
        Date start = sdf.parse("00:44:16");
        Date end = sdf.parse("04:02:39");
        long duration = end.getTime() - start.getTime();
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(duration);
        System.out.println(sdf.format(cal.getTime()));
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta