1001Ferramentas
🕒Geradores

Gerador de Hora Aleatória

Sorteia horários (HH:MM:SS) dentro de uma janela informada. Útil para preencher escalas e testes.


  

Gerador de hora aleatória explicado

Um gerador de hora aleatória sorteia um horário uniformemente em uma janela configurável (padrão 08:0018:00). É útil para gerar dados de fixture (appointment_time, scheduled_at, horario_atendimento), semear protótipos de calendário, fazer fuzzing em parsers e gerar logs de evento realistas. Diferente de um timestamp Unix, esse gerador entrega só o componente de hora — sem data anexa.

Formato 24h vs 12h

O mundo está dividido entre duas notações:

  • 24h (ISO 8601, militar, maior parte da Europa, Brasil, Portugal): 00:00 a 23:59. Sem ambiguidade, ordenável como string, única escolha sensata para armazenamento.
  • 12h (EUA, Reino Unido, Austrália coloquial): 1:00 AM a 12:59 PM, repetindo. Cuidado com a pegadinha de meia-noite/meio-dia: 12:00 AM é meia-noite e 12:00 PM é meio-dia — tão contraintuitivo que manuais de estilo recomendam escrever "12 noon" / "12 midnight".
  • Hora militar: idêntica à 24h mas sem dois-pontos — 1430 em vez de 14:30, pronunciado "catorze cem".

Representações ISO 8601 de hora

O padrão ISO 8601 permite várias variantes para hora:

HH:MM             → 14:30           (precisão de minuto)
HH:MM:SS          → 14:30:45        (precisão de segundo)
HH:MM:SS.sss      → 14:30:45.123    (milissegundo)
HH:MM:SS±HH:MM    → 14:30:45-03:00  (com offset UTC)
HH:MM:SSZ         → 14:30:45Z       (UTC, o sufixo "Zulu")

Alguns stacks SQL legados aceitam HHMMSS sem separadores; evite em projetos novos — confunde humanos e date pickers.

Fusos e offsets estranhos

Existem 24 fusos nominais, mas a lista real tem muitos offsets fracionários. A Índia usa +05:30, a Terra Nova (Newfoundland) usa -03:30 e o Nepal fica em +05:45. Uma string de hora pelada como 14:30 é ambígua sem uma data e um fuso — por isso o ISO 8601 recomenda carregar offset quando o valor cruza sistemas.

O horário de verão (DST) introduz uma ambiguidade mais profunda: no dia em que o relógio "volta", a hora local entre 01:00 e 02:00 ocorre duas vezes. O Brasil aboliu o horário de verão em 2019 (Decreto 9.772/2019), então para dados brasileiros novos a ambiguidade sumiu — mas timestamps históricos pré-2019 ainda exigem tratamento cuidadoso.

Amostragem uniforme e casos de borda

O algoritmo é direto: converter os limites inferior e superior para segundos desde meia-noite, sortear um inteiro uniforme no intervalo e converter de volta:

lo = h1*3600 + m1*60
hi = h2*3600 + m2*60
sec = randInt(lo, hi)
out = `${(sec/3600|0).pad(2)}:${((sec/60|0)%60).pad(2)}:${(sec%60).pad(2)}`

Pegadinha sutil: uma faixa "overnight" como 22:00 → 04:00 atravessa meia-noite, e a subtração ingênua dá janela negativa. Resolva somando 24h ao limite superior e tirando o resto módulo 24h.

Perguntas frequentes

Posso restringir só ao horário comercial? Sim — defina De e Até conforme sua janela comercial (o padrão já cobre 08:00–18:00).

A saída inclui fuso horário? Não — o gerador emite valores HH:MM pelados. Se precisa de fuso, anexe no seu pipeline (ex.: 14:30 America/Sao_Paulo).

Posso gerar horas overnight (22:00 a 04:00)? A maior parte dos geradores assume janela no mesmo dia. Para overnight, gere dois lotes (22:00–23:59 e 00:00–04:00) e concatene.

Para que serve? Semear campos mock de created_at, scheduled_at e horario_consulta, gerar escalas aleatórias para testar algoritmos de scheduling, simular tempos de chegada para simulações de fila, e stress-testar bibliotecas de parsing de hora com entrada realista.

Ferramentas Relacionadas