Galera tó meio confuso nesse problema. Como verificar se um intervalo de horas X está contido em outro intervalo Y.
Ex:
String deHoras = "07:15";
String ateHoras = "11:14";
// Está contido em:
String deHorasVer = "08:15";
String ateHorasVer = "10:30";
Tentei com date before e after e tá rolando não!
SimpleDateFormat formatador = new SimpleDateFormat("HH:mm");
try {
Date beforeDate = formatador.parse(deHoras);
Date afterDate = formatador.parse(ateHoras);
Date deDateVer = formatador.parse(deHorasVer);
Date ateDateVer = formatador.parse(ateHorasVer);
if((beforeDate.after(deDateVer) && beforeDate.before(ateDateVer)) || (afterDate.after(deDateVer) && afterDate.before(ateDateVer))){
System.out.println("Dentro do intervalo!");
}else{
System.out.println("Fora do intervalo!");
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
A lógica do if tem que ser toda com &&:
if((beforeDate.after(deDateVer) && beforeDate.before(ateDateVer))
&& (afterDate.after(deDateVer) && afterDate.before(ateDateVer))){
...
}
Parece que essa questão é meio difícil mesmo as respostas que eu achei não funcionaram muito bem!
Não queria mas alguém sabe como resolver com sql?
tenta o JodaTime!
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm");
DateTime deHoras = formatter.parseDateTime("09:15");
DateTime ateHoras = formatter.parseDateTime("09:45");
DateTime deHorasVer = formatter.parseDateTime("08:15");
DateTime ateHorasVer = formatter.parseDateTime("10:30");
boolean inicio = deHoras.isAfter(deHorasVer);
boolean fim = ateHoras.isBefore(ateHorasVer);
if (inicio && fim) {
System.out.println("o primeiro intervalo está contido no segundo intervalo!");
} else {
System.out.println("o primeiro intervalo não está contido no segundo intervalo");
}
}
Fiz rapidinho porque estou no trabalho, mas acho que a idéia é por ai!
Abraço, espero ter ajudado!
Galera muito obrigado msm!
Vlw bobmatta por ter me falado da Joda-Time é perfeito!
Vasculhando a documentação, achei o método overlap que obtém a sobreposição de uma hora e outra. Depois fiz umas alterações e ficou perfeito!
Segue ae o código tenso! kkkkkkk!
public static void main (String [] args){
String deHoras = "13:56";
String ateHoras = "14:55";
String deHorasVer = "12:15";
String ateHorasVer = "13:55";
DateTimeFormatter formatador = DateTimeFormat.forPattern("HH:mm");
try {
DateTime beforeDate = formatador.parseDateTime(deHoras);
DateTime afterDate = formatador.parseDateTime(ateHoras);
DateTime deDateVer = formatador.parseDateTime(deHorasVer);
DateTime ateDateVer = formatador.parseDateTime(ateHorasVer);
Interval interval = new Interval(beforeDate, afterDate);
Interval interval2 = new Interval(deDateVer, ateDateVer);
ReadableInterval readableInterval = interval2;
System.out.println(interval.overlap(readableInterval)); //Se retornar null está fora do intervalo senão está no intervalo
// o método overlaps() é melhor ainda que retorna true ou false
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}