Pular para o conteúdo

Soluções · Integrações, sistemas e qualidade de dados

Data e hora sem fuso: onde o registro perde sentido

Como implementar dado temporal que não traz o fuso declarado?

Resposta direta

Horário sem fuso é leitura de relógio local, não um instante. A implementação se apoia em três decisões: gravar o instante em UTC, preservar o offset e o fuso de origem no próprio registro, e manter a regra de conversão versionada. Sem isso, o mesmo dado muda de significado quando o horário de verão muda ou quando outro sistema lê a base em fuso diferente. Onde o offset de origem não existe, o registro não pode ser convertido com segurança: ele fica marcado como não resolvido, com responsável e critério definidos, em vez de receber um fuso suposto.

Objetivo
Orientar implementação
Formato indicado
Projeto de implementação
Atualizado em

O que esta página acrescenta: Trata o campo temporal isolado: como declarar o fuso, preservar o offset de origem e o que fazer quando o passado não pode mais ser convertido.

O que o valor sem fuso afirma sobre o registro

Um campo que guarda 14/03 09:15 diz apenas que o relógio de algum lugar marcava nove e quinze. Não diz se esse relógio estava em São Paulo, em Lisboa ou em um servidor ajustado em UTC. A distância entre essas leituras é de horas e aparece em prazo, em janela de atendimento e na ordem dos eventos.

O problema não está no formato, está na ausência de declaração. Dois sistemas podem gravar o mesmo fato com valores diferentes e ambos estarem corretos na leitura local. A conciliação falha porque compara texto, não instante.

Declaração de fuso no desenho do campo

O desenho mínimo tem três partes: o instante em UTC, o offset vigente no momento do fato e o identificador do fuso de origem. O offset sozinho não reconstrói regras futuras, e o identificador sozinho não resolve registros antigos cujo offset mudou. Guardar os dois evita depender da tabela de conversão atual para interpretar o passado.

A regra vale por campo, não por sistema. Um cadastro pode ter data de nascimento, que é data civil sem hora, e data de criação do registro, que é instante. Tratar os dois com o mesmo tipo produz erro silencioso. A definição de qual é qual precisa estar escrita e ter responsável nomeado, porque corrigir um campo mal classificado custa mais que a definição inicial.

O que a conversão não recupera

Converter para UTC não corrige a regra de negócio que gerou o horário. Se o sistema registrou o encerramento no fuso do servidor por engano, o valor em UTC será consistente e ainda assim errado. Consistência técnica não substitui a conferência contra o documento de origem.

Também não há conversão segura quando o offset de origem se perdeu e o período atravessa mudança de horário de verão: a hora local fica ambígua ou inexistente. Nesses casos o dado permanece não resolvido, e o custo aceito é registrar a lacuna com critério. Há situações em que a abordagem não se aplica: eventos recorrentes em hora local, como um fechamento diário às 18h, são regra de calendário, não instante, e devem ficar como hora local com fuso declarado.

Recurso prático

Reconstrução do instante a partir de hora local e offset

instante_utc = hora_local − offset_origem; status_conversao fica ambíguo quando a hora local ocorre duas vezes ou nenhuma vez na transição de horário de verão

hora_local
data e hora sem fuso
valor exatamente como gravado no sistema de origem, sem indicação de fuso
offset_origem
horas e minutos
diferença entre a hora local e UTC vigente no momento do fato, com sinal
instante_utc
data e hora em UTC
instante resultante, gravado em formato que declara o fuso
status_conversao
resolvido ou ambíguo
marca se a hora local existe uma única vez naquele dia; horários repetidos ou inexistentes ficam como não resolvidos

O erro mais comum é aplicar o offset atual a registros antigos. A regra de horário de verão muda por decisão administrativa, então o offset precisa vir do momento do fato, não da tabela carregada hoje.

Sobre o que está escrito aqui

Conceitos relacionados: timestamp sem fuso · offset UTC · horário de verão · fuso de origem · registro de auditoria. Exemplos são ilustrativos. Não há cliente, resultado, preço, prazo ou certificação nesta página. Quando o formato indicado é Projeto de implementação, ele descreve uma possibilidade de trabalho — a conversa inicial avalia contexto e aderência.

Para continuar

Páginas relacionadas

O mesmo problema em outro objetivo

Outras leituras em Integrações, sistemas e qualidade de dados

Quer avaliar isso no seu contexto?

Esta página trata de dado temporal sem fuso declarado. Diagnóstico de integração é a frente que investiga o mecanismo por trás desse tipo de problema. O formato mais associado é Projeto de implementação.