Hai ragione la logica deve essere invertita ma sto punto e accapo.
Ho modificato il tuo codice in questo modo:
codice:
// Imposto l'orario minimo: ore 22:00:00 di oggi
GregorianCalendar oraMin = new GregorianCalendar();
oraMin.set(Calendar.HOUR_OF_DAY, 22);
oraMin.set(Calendar.MINUTE, 0);
oraMin.set(Calendar.SECOND, 0);
long millisMin = oraMin.getTime().getTime();
// Imposto l'orario massimo: ore 04:00:00 di domani
oraMin.add(Calendar.HOUR, 6); // Aggiungo 6 ore all'ora minima
long millisMax = oraMin.getTime().getTime();
// Verifico se una determinata data/ora ricade nell'intervallo
//Date dataDaVerificare = ...;
long millis = d2.getTime();
if(diff >= (8 * 60 * 60 * 1000)){ //8 ore convertite in millisecondi
System.out.println("c'è diaria");
if ((millisMin >= millis) && (millis <= millisMax)){
// Sì, l'ora è fra le 22:00 e le 04:00
}
}