2016-02-04 14 views
5

Si prega di suggerire se c'è un supporto API per determinare se il mio tempo è tra 2 LocalTime istanze, o suggerire un approccio diverso.tra java.time.LocalTime (giorno successivo)

ho questa entità:

class Place { 
    LocalTime startDay; 
    LocalTime endDay; 
} 

che memorizza l'inizio giorno e la fine dell'orario di lavoro, vale a dire da '09:00' fino a '17: 00' , o una discoteca dal '22: 00' till "5:00".

Devo implementare un metodo Place.isOpen() che determina se il luogo è aperto in un dato momento.

Un semplice isBefore/isAfter non funziona qui, perché abbiamo anche bisogno di determinare se l'ora di fine è il giorno successivo.

Ovviamente, possiamo confrontare l'ora di inizio e di fine e prendere una decisione, ma voglio qualcosa senza logica aggiuntiva, solo una semplice chiamata between(). Se LocalTime non è sufficiente per questo scopo, si prega di suggerire altro.

+4

post qualcosa che avete provato. Come pensi che gestirai il caso in cui l'orario di chiusura è "prima" (senza considerare la data) l'orario di apertura? – Tunaki

+1

"Certo, possiamo confrontare due volte e prendere una decisione, ma non penso che sia bello." Perché pensi che? Quale soluzione stai cercando? Definisci "bel modo". – Tunaki

risposta

7

Se ho capito bene, è necessario effettuare due casi a seconda che l'orario di chiusura sia lo stesso giorno dell'ora di apertura (9-17) o il giorno successivo (22-5).

potrebbe essere semplicemente:

public static boolean isOpen(LocalTime start, LocalTime end, LocalTime time) { 
    if (start.isAfter(end)) { 
    return !time.isBefore(start) || !time.isAfter(end); 
    } else { 
    return !time.isBefore(start) && !time.isAfter(end); 
    } 
} 
+0

Grazie, questo è quello che ho finito con. Tuttavia questo sembra un caso d'uso popolare, e mi chiedevo se c'è qualche supporto da parte dell'API. O forse qualche struttura che memorizzerebbe quel giorno in più, per fare un solo confronto alla volta. Ma se si è capito, questo non funzionerà, dal momento che è necessario determinare la cosa del "giorno successivo" anche sul tempo di input. La vita è dolore :) Segnerò la tua risposta come soluzione. –

+1

Non penso che ci sia un modo più semplice. – assylias

+0

Grazie per la modifica. –

0

Questo sembra più pulito per me:

if (start.isBefore(end)) { 
    return start.isBefore(date.toLocalTime()) && end.isAfter(date.toLocalTime()); 
} else { 
    return date.toLocalTime().isAfter(start) || date.toLocalTime().isBefore(end); 
} 
Problemi correlati