Português (Brasil)

Ferramentas para desenvolvedores · Conversor de carimbo de data/hora Unix

Carimbos de data e hora Unix negativos: como as datas anteriores a 1970 são representadas

· Como funciona

carimbos de data/hora horário unix formatos de dados

Uma linha do tempo que se estende à esquerda da época 1970 em valores negativos
Ilustração vetorial original ToolAcre

O tempo Unix conta para frente a partir de 1970, mas também conta para trás. Esta postagem explica o que significa uma época negativa, como −1 se torna o último segundo de 1969 e onde os sistemas que assumem valores positivos quebram.

Uma data de nascimento com sinal de menos — um usuário nascido em 1965 armazenado como um número inteiro negativo e o código que o tratou como um erro

Um registro para uma pessoa nascida antes de 1970 pode conter legitimamente um carimbo de data/hora Unix negativo. Rejeitar todos os sinais de menos à esquerda converte uma escolha de representação em um bug de perda de dados. O analisador de ToolAcre aceita um sinal opcional e `fromEpoch` marca um valor interpretado de milissegundos abaixo de zero como `beforeEpoch` em vez de tratá-lo como inválido.

A tela então adiciona uma nota explicando que o instante precede a época Unix. Isso é mais forte do que renderizar uma data silenciosamente porque mantém o sinal incomum visível para o revisor. Se um esquema upstream proíbe negativos, a falha pertence a esse esquema ou migração, não à aritmética que mapeia contagens em ambos os lados de zero.

Inteiros assinados e a época — por que time_t é assinado e a que −1 e −86400 correspondem

Zero é 1970-01-01T00:00:00.000Z. Os testes do repositório provam que −1 segundo é o instante imediatamente anterior, `1969-12-31T23:59:59.000Z`. Da mesma forma, −86,400 segundos é um dia POSIX fixo antes de zero. A aritmética assinada torna o eixo contínuo em vez de exigir uma segunda época para registros mais antigos.

O esboço atribuiu armazenamento assinado a `time_t`, mas este código não estabelece o histórico de design ou tipo usado por cada plataforma. Sua evidência mais restrita é suficiente: os números JavaScript podem ser negativos, a detecção usa magnitude absoluta e a Data pode formatar o resultado. Descreva o tipo declarado do campo produtor separadamente da entrada aceita pelo conversor.

Aritmética de época assinada em torno de zero, sem afirmar por que cada vez_t escolheu seu tipo

Os valores negativos mantêm a mesma distinção de unidades que os positivos. `−1000` segundos aponta 1,000 segundos antes da época, enquanto `−1000` milissegundos aponta apenas um segundo antes dela. A detecção automática trata ambos como segundos porque sua magnitude está abaixo de 10¹¹, portanto, uma contagem curta de milissegundos pré-época requer a seleção explícita de milissegundos.

Esta é uma falha concreta do folclore da contagem de dígitos. Um desenvolvedor que vê um sinal de menos e quatro dígitos não pode inferir a unidade pela aparência. Use o contrato de origem, escolha o seletor e inspecione a nota da unidade. A regra de magnitude de ToolAcre é um padrão para dados típicos, não um substituto para metadados em valores históricos próximos a 1970.

Onde os valores negativos falham - sistemas que usam −1 como sentinela, armazenamento não assinado, seletores de data que restringem e linguagens que os rejeitam

Fora do conversor, `−1` às vezes é reservado como sentinela de valor ausente e uma coluna não assinada não pode preservar nenhum instante negativo. Essas são possibilidades de design comuns, mas o repositório não pode certificar como um determinado banco de dados, seletor de data ou linguagem se comporta. Teste o limite real antes de mover as datas de arquivamento através dele.

Uma investigação útil contém três valores: nulo ou o marcador ausente documentado, −1, e uma data claramente mais antiga. Se −1 desaparecer enquanto o valor mais antigo sobrevive, o tratamento sentinela está implicado; se todos os negativos falharem, inspecione o tipo e a validação. Não “corrija” o sintoma adicionando 1970 anos ou tomando um valor absoluto, pois ambos criam instantes diferentes.

Exemplo resolvido: convertendo −14182940 — a aritmética para uma data 1969 de julho em UTC e em uma zona local a oeste de Greenwich

Por −14,182,940 segundos, comece na época e retroceda 164 completando 86,400 dias de segundos, deixando 13,340 segundos. O restante são 3 horas, 42 minutos e 20 segundos. A leitura UTC resultante é `1969-07-20T20:17:40.000Z`, um instante escolhido aqui especificamente para este artigo.

Uma leitura local a oeste de UTC pode mostrar uma hora anterior ou até mesmo outra data, mas seu resultado exato depende da zona do navegador e das regras internacionais. Leia no painel em vez de publicar uma resposta universal. A verificação fixa é a linha ISO; a linha local é uma anotação ambiental na mesma contagem negativa.

Exemplo resolvido: convertendo −14,182,940 com aritmética UTC verificável

ToolAcre verifica seu valor interpretado em relação a ±8.64×10¹⁵ milissegundos, o intervalo de datas indicado na fonte. Também comprova a conversão de −2,208,988,800 segundos para `1900-01-01T00:00:00.000Z`. Esses fatos mostram que a rota chega bem antes de 1970 sem implicar que todo sistema de armazenamento possa transportar o mesmo alcance.

Um campo assinado de 32 bits tem um intervalo matemático mais estreito do que JavaScript Data, mas o conversor não inspeciona a largura do campo quando você cola um número. Preservar o tipo de origem em uma auditoria. Uma conversão de navegador bem-sucedida demonstra representabilidade aqui, e não uma viagem de ida e volta segura por meio de firmware, colunas SQL ou protocolos binários em outros lugares.

O intervalo de datas do conversor é conhecido; limites externos de 32 bits dependem do tipo de armazenamento

Transformar uma contagem em uma data JavaScript não reconstrói o calendário civil impresso em todos os locais há séculos atrás. A implementação usa o modelo de data da plataforma e retorna uma representação ISO; não contém seletor de calendário histórico, arquivo local ou fonte documental para reformas de calendário. Essas reivindicações estão intencionalmente ausentes.

Para registros de software modernos, a representação da máquina proléptica ainda pode ser exatamente o contrato que você precisa. Para genealogia, história jurídica ou transcrição de arquivo, preserve a data escrita original e seu contexto de calendário juntamente com qualquer época derivada. Um número classificável conveniente não deve eliminar a incerteza que a conversão não pode resolver.

As afirmações do histórico do calendário estão fora da evidência deste conversor

Negativo é uma direção no eixo da época, não uma categoria de erro. ToolAcre analisa-o, aplica as mesmas regras de segundos ou milissegundos por magnitude e sinaliza o resultado como antes da época. Esse comportamento permite que um revisor distinga um instante antigo legítimo de uma falha sentinela ou de armazenamento não assinado em outro lugar.

Ao auditar dados pré-1970, indique a unidade, o tipo de fonte e a convenção de valor ausente antes de interpretar o sinal. Em seguida, compare o resultado de ISO com um registro conhecido. O sinal por si só é aritmética significativa; o esquema circundante determina se o produtor pretendia aquela aritmética ou usou o mesmo número como valor de controle.