Use the class java.time.LocalTime
. See more about her in this other question and answer from me .
If you want to do without using the java.time
package, see the other answer of mine to this question .
Here is a sample code:
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
class TesteDatas {
private static final DateTimeFormatter FORMATO_HORAS = DateTimeFormatter
.ofPattern("HH:mm")
.withResolverStyle(ResolverStyle.STRICT);
private static LocalTime faltando(LocalTime agora, LocalTime desejada) {
return desejada.minusHours(agora.getHour()).minusMinutes(agora.getMinute());
}
private static void mostrar(LocalTime horario, String objetivo) {
LocalTime desejada = LocalTime.parse(objetivo, FORMATO_HORAS);
LocalTime falta = faltando(horario, desejada);
System.out.println(
"Entre " + horario.format(FORMATO_HORAS)
+ " e " + desejada.format(FORMATO_HORAS)
+ ", a diferença é de " + falta.format(FORMATO_HORAS)
+ ".");
}
public static void main(String[] args) {
LocalTime agora = LocalTime.now();
mostrar(agora, "07:30");
mostrar(LocalTime.of( 5, 30), "07:30");
mostrar(LocalTime.of( 7, 10), "07:30");
mostrar(LocalTime.of( 0, 0), "07:30");
mostrar(LocalTime.of( 7, 0), "07:30");
mostrar(LocalTime.of( 7, 30), "07:30");
mostrar(LocalTime.of( 7, 31), "07:30");
mostrar(LocalTime.of(10, 0), "07:30");
mostrar(LocalTime.of(19, 30), "07:30");
mostrar(LocalTime.of(23, 59), "07:30");
mostrar(LocalTime.of( 0, 0), "23:59");
mostrar(LocalTime.of(23, 59), "00:00");
}
}
Here's the output (the first line will vary according to the time you run):
Entre 01:02 e 07:30, a diferença é de 06:28.
Entre 05:30 e 07:30, a diferença é de 02:00.
Entre 07:10 e 07:30, a diferença é de 00:20.
Entre 00:00 e 07:30, a diferença é de 07:30.
Entre 07:00 e 07:30, a diferença é de 00:30.
Entre 07:30 e 07:30, a diferença é de 00:00.
Entre 07:31 e 07:30, a diferença é de 23:59.
Entre 10:00 e 07:30, a diferença é de 21:30.
Entre 19:30 e 07:30, a diferença é de 12:00.
Entre 23:59 e 07:30, a diferença é de 07:31.
Entre 00:00 e 23:59, a diferença é de 23:59.
Entre 23:59 e 00:00, a diferença é de 00:01.
The key to the difference calculation is in the faltando
method:
private static LocalTime faltando(LocalTime agora, LocalTime desejada) {
return desejada.minusHours(agora.getHour()).minusMinutes(agora.getMinute());
}
That is, to calculate the difference between the two schedules, subtract the hours and the minutes. Class LocalTime
goes around midnight in case of times that would be negative or would exceed 23:59.
See here working on ideone.
Ah, it's important to remember that objects of type java.time.format.DateTimeFormatter
need only be created once and can be reused at will. They are thread-safe and immutable and you can put them in static variables. This is something that does not occur with java.util.SimpleDateFormatter
.