Dado um LocalTime
adicione n
minutos a ele até meia-noite e imprima esses horários no console. Exemplo:
public static void main(String[] args) {
LocalTime start = LocalTime.of(10, 12, 0);
LocalTime midnight = LocalTime.of(23, 59, 59);
for (LocalTime t = start; t.isBefore(midnight); t = t.plusMinutes(30)) {
System.out.println(t);
}
}
Esperado:
10:12
10:42
11:12
11:42
12:12
...
...
21:42
22:12
22:42
23:12
23:42
O acima resulta em um loop infinito. Como evitá-lo?
Como você está observando,
t.isBefore(midnight)
não será suficiente, porque quase todos os valores LocalTime satisfarão essa condição.O que você realmente quer é determinar se adicionar 30 minutos fará com que o tempo seja menor que o valor atual de
t
:Isso interromperá o loop quando adicionar 30 minutos
t
resultar em um valor menor quet
ele mesmo, o que só pode acontecer quando a adição de minutos ocorrer no final do dia.Mas não é perfeito, porque não imprimirá o último valor do dia. Você pode fazer isso com uma segunda variável que rastreia o tempo anterior:
Como a
LocalTime
documentação afirma,LocalTime is an immutable date-time object that represents a time, often viewed as hour-minute-second.
LocalTime
não tem conceito de dia, então 23:59:59 é o valor máximo paraLocalTime
. O loop só irá parar quando, após várias adições para começar, eventualmente se tornar 23:59:59. Alternativamente, você pode usarLocalDateTime
para torná-lo ciente do dia. Por exemplo:O código acima imprimirá o que você deseja e parará normalmente: