Conceitos errôneos dos programadores sobre o tempo Unix

Peço desculpas a Patrick Mackenzie .

Danny perguntou ontem sobre fatos curiosos sobre o tempo no Unix, e lembrei-me de que às vezes funciona de maneira completamente não intuitiva.

Esses três fatos parecem ser extremamente razoáveis ​​e lógicos, certo?

  1. Hora 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 do Unix mudará exatamente um segundo.
  3. O tempo Unix nunca se move para trás.

Tudo isso não é verdade.

Mas não basta dizer "Tudo isso é falso" sem explicar o porquê . Veja abaixo uma explicação. Mas se você quiser pensar por si mesmo, não role o relógio!


Relógio de mesa dos anos 1770. Compilado por John Leroux. Da coleção de Wellcome . Publicado sob CC BY

Todas as três falácias têm um motivo: pular segundos . Se você não estiver familiarizado com segundos extras, aqui está uma referência rápida:

A hora UTC é determinada por dois fatores:

  • Horário atômico internacional : leituras médias de centenas de relógios atômicos em todo o mundo. Podemos medir um segundo pelas propriedades eletromagnéticas de um átomo, e essa é a medida de tempo mais precisa conhecida pela ciência.
  • Tempo universal , baseado na rotação da Terra em torno de seu próprio eixo. Uma volta completa - um dia.

O problema é que esses dois números nem sempre coincidem. A rotação da Terra não é consistente - está diminuindo gradualmente, de modo que o dia no Tempo Universal está ficando mais longo. Por outro lado, os relógios atômicos são diabolicamente precisos e constantes por milhões de anos.

Quando duas vezes caem da sincronização, um segundo é adicionado ou removido no UTC para restaurar a sincronização. Desde 1972, o serviço IERS (que executa este caso) adicionou 27 segundos extras. O resultado foi 27 dias de UTC, com duração de 86.401 segundos. Teoricamente, é possível a aparência de um dia com duração de 86 399 segundos (menos um). Ambas as opções contradizem o pressuposto fundamental do tempo Unix.

O tempo Unix assume que todos os dias duram exatamente 86.400 segundos (60 × 60 × 24 = 86.400), sem segundos extras. Se esse salto ocorrer, o tempo do Unix aumentará após um segundo ou contando dois segundos em um. A partir de 2019, faltam 27 segundos bissextos.

Portanto, nossos erros devem ser complementados da seguinte maneira:

  • A hora 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 se o segundo extra não tiver sido excluído .

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

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



    Se você iniciar às 23: 59: 58: 00 UTC e esperar um segundo, o horário do Unix avançará dois segundos no UTC e o carimbo de data e hora do Unix 101 não será atribuído a ninguém.
  • O tempo Unix nunca pode voltar até que um segundo extra seja adicionado .

    Isso já aconteceu 27 vezes na prática. No final do dia, o UTC adiciona um segundo adicional 23:59:60. Os dias do Unix têm o mesmo número de segundos, portanto, não é possível adicionar um segundo extra; em vez disso, você deve repetir os carimbos de hora do Unix pelo último segundo. Aqui está o que parece em intervalos de quarto de segundo:



    Se você iniciar às 23: 59: 60.50 e esperar por meio segundo, o horário do Unix retornará por meio segundo e o carimbo de data e hora do Unix 101 corresponderá a dois segundos do UTC.

Provavelmente, essas não são as únicas esquisitices do tempo no Unix - exatamente o que eu lembrei ontem.

O tempo é uma coisa muito estranha.

Source: https://habr.com/ru/post/pt452584/


All Articles