GH GambleHub

Fusos horários e sensibilidade

1) Princípios básicos

UTC como transporte e armazenamento. Todos os horários de servidor e chaves de triagem estão em UTC. A conversão para tempo de aço local está na borda (edge/UI) ou em um serviço de formatação especialmente selecionado.
«Europe/Kyiv» não é apenas «UTC + 02:00». Guarde os ID IANA (tzdb) no perfil do usuário/objeto em vez de «+ 03:00».
Uma clara diferença de relógio.

Wall clock (tempo humano, sujeito a DST).
UTC clock (escala universal).
Monotonic clock (para medição de longas e temporizações). Nunca calculem os horários do relógio.
Idempotidade e tolerância ao tremor do tempo. Os sistemas devem passar corretamente por pequenas quedas NTP/deslocamento.


2) Modelo de dados e contratos API

Eventos: 'occurred _ at' (UTC, RFC 3339), 'timezone' (IANA), opcionalmente 'wall _ time' (local que mantém o deslocamento durante a criação).
Períodos: use intervalos semiabertos '[start, end)' em UTC; Para agendamentos humanos, guarde a expressão original + área.
Regras recorrentes: Seriado como RRULE/cron-equivalente + IANA-zona. Programe delegar um motor que entenda DST.
Formato de tempo na API: ISO 8601/RFC 3339 com «Z» ou deslocamento explícito, como «2025-10-31T17: 00: 00Z». Não passe linhas flutuantes sem deslocamento.
Versioning: Mudança nas regras de tempo do negócio (por exemplo, mudança do país para UTC + 1 permanente) - migração de configurações e reajuste de horários; leve em consideração nos esquemas de versão.


3) Horário de Verão (DST): ambiguitas e passagens

Tempos locais duplicados. «02:30» pode acontecer duas vezes no outono. O planejador da área deve distinguir entre '2025-10-26T02: 30 + 03' e '2025-10-26T02: 30 + 02'.
Tempos locais perdidos. Na primavera, não existem intervalos de minutos (por exemplo, '02: 00-03: 00'). O programador deve definir uma estratégia para «03:00», omitir ou executar «o mais rápido possível».
Recomendação: guarde a tarefa como «regra local + zona» e materialize as instâncias reais no UTC com antecedência (rolling window), fixando a política selecionada em DST.


4) Leap seconds и time smear

Leap second. Um segundo adicional às vezes é inserido no UTC. A maioria dos processos não deve «ver» 23:59:60.
Smear (amassar). Alguns ambientes distribuem suavemente o ajuste para a janela (por exemplo, por exemplo, £12 horas) para evitar o salto.
Prática: Alinhe uma única política de tempo para todo o cluster (NTP/smir), regue-a em metadados e mantenha-a no runbook.


5) Planejadores e cron-patters

O perigo do simples cron. Cron clássico não conhece DST nem áreas IANA. Use os motores onde a programação está ligada à área (Classe Quartz, Serviços Scheduler na nuvem, Kubernetes CronJob com área através do controlador/adição).
A materialização dos horários. Para ser confiável, materialize os próximos N de lançamentos em UTC (por exemplo, de 7 a 30 dias), armazene o cursor e defina a política em DST.
Idempotidade de tarefas. Ключ deduplication: `(job_id, scheduled_at_utc)`; a reativação não deve duplicar efeitos secundários.
Deslizamento de horas. Em casos de pausas/incidentes prolongados, decida se você pode fazer catch-up (executar omissão) ou skip. Configure per-job.


6) Tempo em protocolos e filas

Pneus de evento (Kafka/Pulsar). Guarde 'event _ time' e 'ingest _ time' separadamente. Use «event _ time» para redefinir.
Consumidores Idumpotentes. Quando você voltar a entregar, direcione-se para a chave de evento e 'event _ time', em vez de se deslocar para a partição.
Triagem e janelas. As janelas «24 horas no horário local da loja» calculem como intervalos UTC obtidos a partir de regras locais de uma área específica em uma data específica.


7) Logs, traçados, métricas

Padrão de tempo único: todos os logs técnicos e métricas em UTC (com «Z»). A exibição em dashboards é localizada para o usuário.
Traçados: passe 'trace _ start _ utc', 'duration _ ms' em relógios monotônicos. Nunca subtraiam os times.
Relatórios de negócios: produza «24 horas» em uma área de domínio (por exemplo, «Europe/Paris» para imposto francês) em vez de UTC. Documentem claramente.


8) Perfis e conteúdo personalizados

Профиль: `preferred_timezone` (IANA), `preferred_locale`, `currency`, `week_start` (Mon/Sun).
Entidades multibilionárias: para comandos/organizações, guarde «área de domínio» (por exemplo, loja/direito) independentemente da área pessoal do participante.
Notificações: calcule o «relógio silencioso» na área de utilizador; enviar um shedulite de uma janela UTC com segurança para DST.


9) Anti-pattern

Armazenar apenas tempo local sem deslocamento/zona.
Pedir com força o deslocamento '+ hh: mm' em vez do ID IANA.
Contar as durações através da diferença de dois times «estampados».
Planejar por cron sem suporte para áreas/DST.
Fazer análise «por dia» na UTC, quando a norma requer área local.
Supor a permanência das regras da zona (os países mudam a política do tempo).


10) Testes de tempo

Relógio controlado. Insinua o «relógio» no código (Clock/TimeProvider) para testes determinados.

Kits de mala:
  • Mudança para horário de verão/inverno (duplos/passagens).
  • Mover o usuário entre as zonas (mudar 'preferred _ timezone').
  • Altere as regras no tzdb (atualização da base - testes de regressão).
  • Deslocamentos NTP, entrega de eventos atrasada.
  • Testes de Fazzi. Zonas aleatórias, datas, formatos; comparação com a biblioteca de referência.

11) Observabilidade e exploração

Alerts: NTP de descolonização, tzdb de atualização atrasado, tarefas de cron não cumpridas em DST.
Dashboards: distribuição de eventos por zona/dia local; contadores catch-up/skip.
Runbook: procedimentos para mudança de regras de tempo na jurisdição; ordem de atualização do tzdb; Comunicação com os donos dos horários.


12) Pattern de implementação

Time Normalization Gateway. Serviço fino que normaliza os tempos entrantes do RFC 3339 UTC, valida áreas (IANA) e contexto complementar.
Local-Day Builder. Biblioteca/serviço que, a partir do «dia local» e da zona, constrói exatos limites UTC '[start _ utc, end _ utc', considerando DST.
Schedule Materializer. O planejador que armazena regras como «expressão local + zona» materializa futuras instâncias em UTC e controla conflitos/omissões.
Dual-Timestamp Events. Eventos com os campos 'occurred _ at _ utc', 'wall _ time _ local', 'timezone'. Para a UI é atribuído o local, para os sistemas é UTC.


13) Folha de cheque do arquiteto

1. O UTC está armazenado em todo o lado?
2. As entidades da área IANA e a política de dados do domínio?
3. O planejador compreende o DST e materializa as instâncias na UTC?
4. Logs/métricas - em UTC; relatórios - na área de domínio?
5. Timeouts/retrai em relógios monotônicos?
6. A atualização tzdb é automatizada e monitora?
7. Os testes cobrem mudanças de regras, duplicações/omissões de minutos?


14) Mini-receitas (pseudocode)

Converter «dia de trabalho» local em intervalo UTC


function localDayToUtcInterval(dateLocal, tz):
startLocal = combine(dateLocal, 00:00) in tz endLocal  = startLocal + 1 day startUtc  = toUTC(startLocal) // учитывает DST endUtc   = toUTC(endLocal)
return [startUtc, endUtc)

Materializar agendamento repetitivo


inputs: rrule, tz, windowStartUtc, windowEndUtc for each localOccurrence in expand(rrule, tz, [windowStartUtc, windowEndUtc] projected to tz):
emit occurrence { scheduled_at_utc = toUTC(localOccurrence), tz }

Chave Idimpotente para iniciar a tarefa


dedupe_key = hash(job_id + scheduled_at_utc.toString())

15) Segurança e conformidade

Auditoria: guarde ambas as projeções de tempo (UTC e local) para alinhar as reclamações do usuário («me prometeram até 23h00 em Lima») com a cronologia do servidor.
Regulação: os períodos de relatório são formados em áreas necessárias (impostos, limites de jogo responsáveis, restrições de marketing «por relógio»).
Privacidade: fuso horário - configurações pessoais, mas não dados precisos de identificação; processa dentro de políticas gerais de privacidade.


Conclusão

«Sensibilidade ao tempo» não é sobre o formato da data, mas sobre os limites arquitetônicos da responsabilidade: onde armazenar, onde converter, como planejar e como provar a correção. Unificação em nível UTC, áreas IANA explícitas, planejadores bem educados, times duplos e relógios monotônicos transformam o tempo de fonte de incidentes em um serviço previsível de infraestrutura.


Artigos relacionados de Arquitetura e Protocolos (recomendado):
  • GeoDNS e geo-rotação; Balanceamento de carga; Observação de eventos no tempo; Cron-pattern e materialização dos horários; Limitações regionais e 24 horas locais de relatórios.
Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.