Eu tenho um programa itinerário de vôo, onde eu preciso para obter diferença entre partida e hora de chegada. Recebo estes tempos especificados como cordas a partir dos dados. Aqui está o meu problema:
import static java.time.temporal.ChronoUnit.MINUTES;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class test2 {
public static void main(String[] args) {
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("HHmm");
LocalTime departure = LocalTime.parse("1139", dateFormat);
LocalTime arrival = LocalTime.parse("1435", dateFormat);
LocalTime a = LocalTime.parse("0906", dateFormat);
System.out.println(MINUTES.between(departure, arrival));
System.out.println(MINUTES.between(arrival, a));
}
}
Resultado:
176
-329
A primeira vez que retorna a diferença 11:39-14:35 muito bem. Mas a segunda diferença é de apenas 5 horas, enquanto que deve ser 19 horas. Como posso corrigir isso, o que estou fazendo de errado aqui?
Qualquer ajuda seria muito apreciada.
EDIT:. Estou usando gráficos para armazenar meus dados em Um exemplo de um caminho mais curto entre dois aeroportos é assim:
Route for Edinburgh to Sydney
1 Edinburgh, 1139, TK3245, Istanbul, 1435
2 Istanbul, 0906, TK4557, Singapore, 1937
3 Singapore, 0804, QF1721, Sydney, 1521
Estes são os 3 voos que nos leva de EDI para SYD. O formato da saída acima é (Cidade, Horário de Partida, Flight No., Destino, Hora de chegada).
O número total de minutos em 24 horas é de 1440. Então, quando a diferença é inferior a zero (mas você precisa de uma forma positiva), então você deve adicionar um dia inteiro para o seu resultado:
int diff = MINUTES.between(arrival, a);
if (diff < 0) {
diff += 1440;
}
Você pode conseguir a mesma coisa usando o seguinte:
int diff = (MINUTES.between(arrival, a) + 1440) % 1440;