Guide
Carimbo de data e hora inválido: diagnósticos rápidos e correções
A lista de verificação de diagnóstico rápido
- Verifique comprimento: 10=segundos, 13=ms, 16=µs, 19=ns.
- Verificar dígitos: somente números; remova espaços/letras.
- Verifique intervalo: a data resultante é plausível e segura para 64 bits?
- Verifique fuso horário: converta primeiro em UTC e depois aplique o deslocamento de destino.
- Verifique DST edge: se estiver localizando, use uma zona IANA (
America/New_York).
Precisa verificar agora? Vá para Conversor de carimbo de data/hora Unix ou Conversor de lote.
Tipos de erros comuns
- Incompatibilidade de comprimento: 13 dígitos tratados como segundos → data futura distante.
- Caracteres sem dígitos: espaços ocultos, vírgulas ou letras.
- Fora do intervalo: estouro de segundos de 32 bits além de 2038; negativos não suportados em alguns sistemas.
- Ambiguidade de fuso horário: hora local do servidor versus UTC esperado.
- Mudanças de horário de verão: a análise da hora local durante a hora faltante causa falha.
Etapas de validação (copiar e colar)
// JavaScript: validate & normalize to milliseconds
export function normalizeEpoch(raw) {
const trimmed = raw.trim();
if (!/^[0-9]+$/.test(trimmed)) throw new Error("Digits only");
const len = trimmed.length;
if (len === 10) return Number(trimmed) * 1000;
if (len === 13) return Number(trimmed);
if (len === 16) return Number(trimmed) / 1000;
if (len === 19) return Number(trimmed) / 1_000_000;
throw new Error("Invalid length");
}
# Python: validate & to datetime (UTC)
from datetime import datetime, timezone
def parse_epoch(raw: str) -> datetime:
if not raw.isdigit():
raise ValueError("Digits only")
n = len(raw)
if n == 10:
ts = int(raw)
elif n == 13:
ts = int(raw) / 1000
elif n == 16:
ts = int(raw) / 1_000_000
elif n == 19:
ts = int(raw) / 1_000_000_000
else:
raise ValueError("Invalid length")
return datetime.fromtimestamp(ts, tz=timezone.utc)
-- SQL (PostgreSQL): validate timestamp length in a table
SELECT id, ts_raw,
CASE
WHEN ts_raw ~ '^[0-9]{10}$' THEN 'seconds'
WHEN ts_raw ~ '^[0-9]{13}$' THEN 'milliseconds'
WHEN ts_raw ~ '^[0-9]{16}$' THEN 'microseconds'
WHEN ts_raw ~ '^[0-9]{19}$' THEN 'nanoseconds'
ELSE 'invalid'
END AS ts_precision
FROM events
WHERE ts_raw !~ '^[0-9]{10}$'
OR ts_raw::numeric > 32503680000; -- > 3000-01-01 as a sanity bound
Corrigir modelos
- Correção de precisão: detectar comprimento → dimensionar para milissegundos → executar novamente a análise.
- Cortar / higienizar: remove espaços em branco e vírgulas antes da validação de regex.
- Guarda de intervalo: limitar ou descartar valores fora da janela plausível (por exemplo, ano
< 2000ou> 2100). - Correção de fuso horário: analise como UTC e formate para o deslocamento/zona de destino do usuário.
- Análise segura para horário de verão: prefira UTC; se local for necessário, use bibliotecas de zona IANA.
Perguntas frequentes
- Qual é o padrão mais seguro? Analise como UTC e formate para o fuso horário solicitado.
- Como posso evitar problemas de 2038? Armazene como números inteiros de 64 bits; evite armazenamento baseado em segundo de 32 bits.
- Como limpar dados em lote? Use um pré-filtro regex + dimensionamento baseado em comprimento e, em seguida, canalize para um conversor; tente Conversor de carimbo de data/hora em lote.
Ferramentas e guias relacionados
- Conversor de carimbo de data/hora Unix
- [Conversor de carimbo de data e hora em lote](/conversor de carimbo de data e hora em lote)
- Construtor de formato
- Guia ISO 8601
- Níveis de precisão do carimbo de data/hora