Equívocos dos programadores sobre o tempo Unix

Eu peço desculpas Patrick McKenzie.

Ontem Danny Perguntei sobre alguns fatos interessantes sobre a época do Unix e lembrei que às vezes ele funciona de forma totalmente não intuitiva.

Esses três fatos parecem extremamente razoáveis ​​e lógicos, não é?

  1. O horário Unix é o número de segundos desde 1º de janeiro de 1970 00:00:00 UTC.
  2. Se você esperar exatamente um segundo, o tempo Unix mudará exatamente um segundo.
  3. O tempo Unix nunca retrocede.

Nada disso é verdade.

Mas não basta simplesmente dizer: “Nada disto é verdade”, sem explicar. por que. Veja abaixo as explicações. Mas se você quiser pensar por si mesmo, não passe da imagem do relógio!

Equívocos dos programadores sobre o tempo Unix
Relógio de mesa da década de 1770. Compilado por John Leroux. De Coleções de boas-vindas. Publicado sob licença CC BY

Todos os três equívocos têm um motivo: segundos bissextos. Se você não está familiarizado com segundos bissextos, aqui está uma referência rápida:

A hora UTC é determinada por dois fatores:

  • Hora Atômica Internacional: Leituras médias de centenas de relógios atômicos em todo o mundo. Podemos medir o segundo pelas propriedades eletromagnéticas de um átomo, e esta é a medição de tempo mais precisa conhecida pela ciência.
  • Hora mundial, com base na rotação da Terra em torno de seu próprio eixo. Uma revolução completa é um dia.

O problema é que esses dois números nem sempre coincidem. A rotação da Terra não é consistente - ela diminui gradualmente, então os dias no Tempo Universal tornam-se mais longos. Por outro lado, os relógios atômicos são diabolicamente precisos e constantes ao longo de milhões de anos.

Quando dois horários ficam fora de sincronia, um segundo é adicionado ou removido do UTC para trazê-los de volta à sincronia. Desde 1972 serviço IERS (que executa este caso) adicionou 27 segundos extras. O resultado foram 27 dias UTC com duração de 86 segundos. Teoricamente, um dia com duração de 401 segundos (menos um) é possível. Ambas as opções contradizem a suposição fundamental do tempo Unix.

O horário Unix assume que cada dia dura exatamente 86 segundos (400 × 60 × 60 = 24), sem segundos adicionais. Se tal salto ocorrer, o tempo Unix salta um segundo ou conta dois segundos em um. Em 86, faltavam 400 segundos bissextos.

Portanto, nossos equívocos precisam ser complementados da seguinte forma:

  • O horário Unix é o número de segundos desde 1º de janeiro de 1970 00:00:00 UTC menos segundos bissextos.
  • Se você esperar exatamente um segundo, o tempo do Unix mudará exatamente um segundo, a menos que o segundo intercalado tenha sido removido.

    Até agora, os segundos nunca foram removidos na prática (e a desaceleração da rotação da Terra significa que isso é improvável), mas se isso acontecesse, significaria que o dia UTC seria um segundo mais curto. Neste caso, o último segundo do UTC (23:59:59) é descartado.

    Cada dia Unix tem o mesmo número de segundos, portanto o último segundo Unix de um dia abreviado não corresponderá a nenhum horário UTC. Aqui está o que parece, em intervalos de um quarto de segundo:

    Equívocos dos programadores sobre o tempo Unix

    Se você começar às 23:59:58:00 UTC e esperar um segundo, o horário Unix avançará dois segundos UTC e o carimbo de data/hora Unix 101 não será atribuído a ninguém.

  • O tempo Unix nunca pode voltar atrás, até que um segundo bissexto seja adicionado.

    Isso já aconteceu 27 vezes na prática. No final do dia UTC, um segundo adicional é adicionado às 23:59:60. O Unix tem o mesmo número de segundos em um dia, portanto não pode adicionar um segundo extra - em vez disso, ele precisa repetir os carimbos de data e hora do Unix para o último segundo. Aqui está o que parece, em intervalos de um quarto de segundo:

    Equívocos dos programadores sobre o tempo Unix

    Se você começar às 23:59:60.50 e esperar meio segundo, o horário Unix está voltando por meio segundo, e o carimbo de data/hora Unix 101 corresponde a dois segundos UTC.

Estas provavelmente não são as únicas estranhezas dos tempos do Unix - apenas o que me lembrei ontem.

Tempo - muito coisa estranha.

Fonte: habr.com

Adicionar um comentário