groovy date range periodo

Dica em Groovy - Descobrir se um horário está contido em um periodo

Identificador: 11412
Autor: Alan Rodrigues   segunda-feira, Dia 1 de maio de 2023, às 02:48:25 horas
Revisado Por: Alan Rodrigues   quinta-feira, Dia 18 de setembro de 2014, às 21:13:47 horas
Visualização: Todos

Pontos: 0   Acessos: 6310

Saudações galera
Passando por aqui hoje pra deixar uma dica de programção com Groovy rápida e rasteira:
Problema:
  • Como descubro se um horário está contido numa faixa de horários?
Por exemplo, quero saber se o horário 16:32 está contido no período das 16:00 até as 22:00, que nesse exemplo teríamos true como retorno. Beleza?
Segue o código abaixo pra resolver esse problema:


Groovy Code
/**
* @param time String in format '16:32'
* @param range String in format '18:00 22:00'
*/
boolean isTimeWithinRange(String time, String range) {
    def rangeSplitted = range.split(' ')
    def target = Date.parse('HH:mm', "${time}")
    // criamos uma data para o horário inicial e final do período
    def rangeInit = Date.parse('HH:mm', rangeSplitted[0])
    def rangeEnd = Date.parse('HH:mm', rangeSplitted[1])
    
    // criamos um range
    def slot = rangeInit..rangeEnd
    slot.containsWithinBounds(target)
}

println isTimeWithinRange('17:59', '18:00 22:00') // false
println isTimeWithinRange('19:59', '18:00 22:00') // true
O objeto slot é do tipo groovy.lang.ObjectRange, onde utilizamos o método containsWithinBounds para descobrir se aquele horário está contido no período. Para rodar esse snippet utilize o Groovy Web Console.

Abraços