DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Convertendo o tempo!

Saudações. Esse é nosso 9º problema, e hoje veremos como fazer a conversão correta de horas, com números em formato string. No exercício nos é passado algumas regras a serem seguidas para que sua conclusão seja correta, vejamos:

Time conversion -

  • Se a hora for AM, não mudar nada
  • Caso a hora seja 12 e passe do horário padrão, mudar para PM
  • Se a hora for PM, adicionar +12 a contagem
  • Caso a hora seja PM e valor seja 12!, manter do jeito comum(não existe 24 horas e 7 minutos no relógio).

Sabendo assim todas as regras do exercício, temos que saber agora sobre um molde. Com o que se foi passado antes, o exercício nos pede o seguinte resultado:

//fazer isso = 7:34:18PM

// virar isso = 19:34:18
Enter fullscreen mode Exit fullscreen mode

Com todas as exigências postas,façamos o que se pede:

function timeConversion(s) {
    // Write your code here
    const time = s.slice(-2);
    const [hour,minute,second] = s.slice(0,-2).split(":");

    if (time === "AM" && hour === "12"){
      return `00:${minute}:${second}`
    }
    if (time === "AM"){
      return `${hour}:${minute}:${second}`
    }
    if (time === "PM" && hour === "12"){
      return `12:${minute}:${second}`
    }
    if (time === "PM"){
      return `${Number(hour)+ 12}:${minute}:${second}`
    }
}
Enter fullscreen mode Exit fullscreen mode

A função timeConversi~ons guarda os parâmetros string em (s),após isso declaramos uma const time que pegará os valores guardados no parâmetro da função (s) e usará um método para pegar os últimos dois caracteres, chamado .slice(). O slice extrai uma parte de uma string e a retorna como uma nova string, sem modificar a string original.

Feito isso declaramos também as variáveis hour, minute e second, onde o slice pegará os valores de 0(que seria o ínico da string, visto que todo início não é 1, mas 0) parando em -2 que seria onde estaria escrito PM.

Também foi se dado um split para que de maneira lógica, o código coloca em linhas ordenadas. Com isso ele será responsável por transformar: 73418PM, em 7:34:18PM.

Com isso, se o time for igual a AM e hora igual a 12, devemos fazer a conversão e retornar o valor em 00, por exemplo: 00:01:19.

Se o time for igual a AM no contexto padrão, retornar os valores normais.

Se o time for igual a PM e hora igual a 12, devemos mudar a hora para 12.

Se for em outra situação além dessa acrescentaremos + 12 para o horário. Vale destacar essa parte do código: return ${Number(hour)+ 12}:${minute}:${second}. Caso deixassemos o hour solto, ele não iria funcionar pois ele é uma string, não um valor. Com isso,se ${ hour + 12}:${minute}:${second} fosse assim, o resultado seria 1212:01:17 ou algo assim. Por isso fizemos ${Number(hour)+ 12}:${minute}:${second}, utilizando o Number,que é um construtor que trasformará ele em horas.

O resultado de todo esse procedimento será:

07:05:45PM

19:05:45
Enter fullscreen mode Exit fullscreen mode

Temos também dessa vez, uma resolução alternativa. Nesse caso o código é bem menor, mas que funciona do mesmo modo.

function timeConversion(s) {
let hour = s.substring(0,2)
    let minuteSecond = s.substring(3,8)
    let ampm = s.substring(s.length - 2)

    if(ampm === "PM" && parseInt(hour) < 12){
        hour = parseInt(hour) + 12
    }else if(ampm === "AM" && hour === '12'){
        hour = "00"
    }
    return hour+':'+minuteSecond
}
Enter fullscreen mode Exit fullscreen mode

Com isso,finalizamos mais um desafio. Te aguardo no próximo Resolvendo problemas no HackerRank!!

Top comments (0)